昨天我我提到了编码问题,马上有高人2ndboy和Shutra 告诉我是Unicode的BOM在捣蛋,这是记事本的错。
我联想起以前看到过的内容了,以前经常听到这样的伪证:
移动比联通好的理由:
在记事本里键入“移动”,保存。在打开记事本你会发还是电信。
记事本里面开头写一个“联通”,保存再打开就变成了方块。
还没完呢,你删除联通,再输入联通,再保存后关闭。再打开,你会发现什么?
还有好玩的实验:
新建一个文本文件,输入.LOG 然后保存再关闭。再打开,你会发现有些变化。
过一分钟,再打开,你看到的内容又不同了。
还没有完呢,每次保存后再打开都会场有新东西出现,自已动手试试?
还有一个有趣的实验,如果出现了莫名其妙的东西,千万不要怀疑自己的人品出了问题哦,
右键点击桌面新建一个文本文件,输入this sentences are notreadable然后然后保存再关闭。再打开,你会发现有些变化。
记事本怎么会出现这些情况呢?我也不太清楚。不过,可以肯定的第一个和第三个实验是与unicode的判断有关。联通那个问题是与记事本识别文件头有关,恰好联通那个词组倒霉,被记事错误的识别为另一种编码的文件。具体是怎么一个情况我也不记得了。我以前在安全焦点论坛玩的时候遇到高人详细分析过,我一时半刻找不到当初的那个答案。我打不开安全焦点的论坛。
第二个实验的答案是:
.LOG 是记事本的功能, 它定义这个文件为一个日志文件, 每次更新都自动加上日期, 这是记事本自动对文件的更改。
1.有趣:)告诉身边的朋友去。
2.只是,我也用的是联通。
关于记事本的问题,这就是微软比较软的地方。所以我就只用UltraEdit.
http://ms.mblogger.cn/shixinyu1987/posts/22327.aspx
你最近还卖菜不?怎么不写了?
第一个是跟编码有关的,第三个应该是彩蛋吧。
编码问题的确是跟BOM有关,BOM是文本文件最前面的一个标志。如果没有BOM,则通常认为是一个ANSI编码的文件,如果有BOM,则根据BOM来判断是哪种UNICODE编码(有好几种,UCS-2,UC-4,UTF-8,UTF-16等)。“联通”可能刚好与某种编码的BOM一样,所以出现那个问题。而且在第一次保存是它是作为ANSI方式保存的,再次打开以后就变成某种UNICODE编码了,所以会有这种现象。如果第一次保存时指定为非ANSI格式,再次打开就不会有这种问题。
对UTF-8来说,BOM是不必要的。UTF-8编码是可以通过看字节判断出来的。
如果要由软件自动判断文本的编码,显然要有足够多的字节,否则再好的算法也搞不定
确实是这样的
网友abc的答案在下面,供参考。
记事本程序可以打开这两种编码的纯文本:ASCII, Unicode。
如果开头有BOM:FFFE,则是Unicode文本;
如果开头无BOM,则都有可能:Unicode,Unicode and ASCII, ASCII。
第一种情况是将联通的Unicode编码54801A90当成ASCII编码解析,所以出现一些方块乱码;
第三种情况是将this sentences are notreadable的ASCII编码当成Unicode编码来解析,所以会出现奇怪的中文字。
应该是:第一种情况是将联通的gb2312编码C1AA CDA8当成Unicode(little endian)编码解析
应该是:第一种情况是将联通的gb2312编码C1AA CDA8当成Unicode(little endian)编码解析