UTF-8编码检测失败特例
来源:互联网 发布:mac book 充电慢 编辑:程序博客网 时间:2024/06/17 14:40
Ruby中进行UTF-8编码检测的方法是String#unpack方法,传入 "U*" 模板。这个模板的意思是把字符串当成一个UTF-8串,分别把每一个Unicode字符转换成对应的代码点并组合为数组。字符串本身确实是UTF-8,则能够转换成功,否则将抛出异常。根据这种行为,给String添加如下实例方法:
class String
def utf8?
unpack('U*') rescue return false
true
end
end
以上程序在大部分情况下确实正确。但是我发现GB2312编码中,下列汉字的GB2312编码能够通过上面方法的检测,而被误认为是UTF-8串:
位、前、支、校、写、元
可能还有一些。因此,上述方法不适宜用来对可能包含GB2312编码的中文字串进行UTF-8编码检测。
注意这不是Ruby的问题,而是不同编码模式导致的本质难题。
可以做以下实验:
1. 打开notepad,写入一个‘位’字,不回车,直接以ANSI编码保存(注意必须用ANSI编码保存)。
2. 再次打开这个文件,你会看到显示出来的不是“位”字,而是λ。
同样,“前、支、校、写、元” 等单字也存在类似现象。
可见字符串编码检测并不容易。不知有没有什么可靠的方法(除了用Iconv库直试转以外),望知者不吝赐教。
class String
def utf8?
unpack('U*') rescue return false
true
end
end
以上程序在大部分情况下确实正确。但是我发现GB2312编码中,下列汉字的GB2312编码能够通过上面方法的检测,而被误认为是UTF-8串:
位、前、支、校、写、元
可能还有一些。因此,上述方法不适宜用来对可能包含GB2312编码的中文字串进行UTF-8编码检测。
注意这不是Ruby的问题,而是不同编码模式导致的本质难题。
可以做以下实验:
1. 打开notepad,写入一个‘位’字,不回车,直接以ANSI编码保存(注意必须用ANSI编码保存)。
2. 再次打开这个文件,你会看到显示出来的不是“位”字,而是λ。
同样,“前、支、校、写、元” 等单字也存在类似现象。
可见字符串编码检测并不容易。不知有没有什么可靠的方法(除了用Iconv库直试转以外),望知者不吝赐教。
- UTF-8编码检测失败特例
- UTF-8编码中BOM的检测与删除
- UTF-8编码中BOM的检测与删除
- 检测字符串是否为utf-8编码代码
- UTF-8编码中BOM的检测与删除
- 迅雷笔试题的Utf-8编码检测的实现
- UTF-8编码中BOM的检测与删除
- PHP 检测字符串的编码是否是UTF-8编码的函数 check_utf8() 准确率最高的!
- php检测字符串编码(utf-8,gbk,gb2312)是否为utf8编码的方法总结
- UTF-8检测
- UTF-8 编码介绍
- UTF-8编码规则
- UTF-8 编码
- UTF-8编码研究
- UTF-8编码规则
- 关于UTF-8编码
- 关于UTF-8编码
- UTF-8编码问题
- 获取当天、本周、本月相关的数据
- About SharePoint Server 2007 Test Report .
- 广州出差归来
- 打小球游戏(Brick & Ball)最终完美版:C语言实现
- Java2游戏编程读书笔记(6)
- UTF-8编码检测失败特例
- openoffice源代码模块介绍
- 现在的我
- Linux学习十一点建议
- Java SE 中的技术
- J2EE 中的技术
- J2ME 中的技术
- 在线像册
- 如何提高自己的 Java 编程技能