您的位置:首页 > 其它

研究字符编码的时候不要用UltraEdit32

2009-09-17 15:15 239 查看
当时学编程的时候没有太注意字符编码的事情,后来随着工作中不断地接触,才认真地去研究了解了一下。当时最有名的问题就是说在记事本里边敲入“联通”,然后再打开就成乱码了,敲入“移动”则不变,然后得出惊世骇俗的结论:移动比联通强,呵呵。关于编码的问题,在这里不多说了,不清楚可以去google上百度一下。我只简单的重提一下。

主要是因为notepad这个程序作为一个小工具,识别编码的功能不方便做大。当文档中所有字符都在C0≤AA≤DF 80≤BB≤BF这个范围的时候,notepad都无法确认文档的格式,没有自动按照UTF-8格式来"Display"

。"联通"就是C1 AA CD A8,刚好在上面的范围内,所以不能正常显示

[转自网上]


其中提到如果用ASCII方式打开txt文件,就是正常的了。或者用UTF-8方式保存
。用UTF-8保存则以EF BB BF打头的,然后中文字节将以三个字节编码一个汉字。若以Unicode编码,则以FF FE打头,中文字节还以2个字节编码一个汉字。

我写了好几个有着“联通”字符的文本,分别保存为Ansi,UTF-8,Unicode形式,然后在UtraEdit中查看,转成Hex形式,结果发现分别表示为

Ansi:FF FE 6A 00 68 03

UTF-8:FF FE C1 AA CD A8

Unicode:FF FE
C1 AA CD A8

除了最后一个对外,其他两个都有问题,第一个按理没有FF FE,后面更加不对,应该就四个字节,是这个汉字的GB码才对啊,第二个UTF-8跟第三个不一样了么。没有按以上理论来啊,我怎么也没怀疑到UE上,还怀疑编码是不是有什么规则转换的。将
Ansi的文件字节删去了FF FE,用Ansi的方式打开,发现只剩下一个“通”字了,用UE再看一下,发现剩下的是“FF FE 68 03”,反而将第三,四个字节删了。怪了,右击文件属性显示2个字节。于是调出我的终极武器winhex,他的显示分别为:

Ansi:C1 AA CD A8

UTF-8:EF BB BF E8 81 94 E9 80 9A

Unicode:FF FE
C1 AA CD A8

和传说中的字符编码理论描述是一致的。

UtraEdit他是优先识别文本,然而识别编码的功夫又是这么差劲,还停留在记事本的初级阶段。这样也就不说他了,但用Hex查看的时候,显示的又是当前文本中unicode编码二进制表示,不是文件本身的字节表示,所以才有以上的结果。那个Ansi码文件的显示是因为不能识别,默认unicode编码,显示的是当前乱码的unicode编码字节。真是害人不浅哪,枉我信任他这么多年。所以呢,还是要用怀疑的态度去研究问题,不要迷信软件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐