有趣的unicode的BOM byte order mark。

昨天我我提到了编码问题,马上有高人2ndboyShutra 告诉我是Unicode的BOM在捣蛋,这是记事本的错。

我联想起以前看到过的内容了,以前经常听到这样的伪证:

移动比联通好的理由:

在记事本里键入“移动”,保存。在打开记事本你会发还是电信。

记事本里面开头写一个“联通”,保存再打开就变成了方块。

还没完呢,你删除联通,再输入联通,再保存后关闭。再打开,你会发现什么?

还有好玩的实验:

新建一个文本文件,输入.LOG 然后保存再关闭。再打开,你会发现有些变化。

过一分钟,再打开,你看到的内容又不同了。

还没有完呢,每次保存后再打开都会场有新东西出现,自已动手试试?

还有一个有趣的实验,如果出现了莫名其妙的东西,千万不要怀疑自己的人品出了问题哦,

右键点击桌面新建一个文本文件,输入this sentences are notreadable然后然后保存再关闭。再打开,你会发现有些变化。

记事本怎么会出现这些情况呢?我也不太清楚。不过,可以肯定的第一个和第三个实验是与unicode的判断有关。联通那个问题是与记事本识别文件头有关,恰好联通那个词组倒霉,被记事错误的识别为另一种编码的文件。具体是怎么一个情况我也不记得了。我以前在安全焦点论坛玩的时候遇到高人详细分析过,我一时半刻找不到当初的那个答案。我打不开安全焦点的论坛。

第二个实验的答案是:

.LOG 是记事本的功能, 它定义这个文件为一个日志文件, 每次更新都自动加上日期, 这是记事本自动对文件的更改。

12 thoughts on “有趣的unicode的BOM byte order mark。”

  1. 第一个是跟编码有关的,第三个应该是彩蛋吧。

    编码问题的确是跟BOM有关,BOM是文本文件最前面的一个标志。如果没有BOM,则通常认为是一个ANSI编码的文件,如果有BOM,则根据BOM来判断是哪种UNICODE编码(有好几种,UCS-2,UC-4,UTF-8,UTF-16等)。“联通”可能刚好与某种编码的BOM一样,所以出现那个问题。而且在第一次保存是它是作为ANSI方式保存的,再次打开以后就变成某种UNICODE编码了,所以会有这种现象。如果第一次保存时指定为非ANSI格式,再次打开就不会有这种问题。

  2. 网友abc的答案在下面,供参考。
    记事本程序可以打开这两种编码的纯文本:ASCII, Unicode。
    如果开头有BOM:FFFE,则是Unicode文本;
    如果开头无BOM,则都有可能:Unicode,Unicode and ASCII, ASCII。
    第一种情况是将联通的Unicode编码54801A90当成ASCII编码解析,所以出现一些方块乱码;
    第三种情况是将this sentences are notreadable的ASCII编码当成Unicode编码来解析,所以会出现奇怪的中文字。

  3. 第一种情况是将联通的Unicode编码54801A90/b>当成ASCII/b>编码解析,所以出现一些方块乱码

    应该是:第一种情况是将联通的gb2312编码C1AA CDA8当成Unicode(little endian)编码解析

  4. 第一种情况是将联通的Unicode编码54801A90当成ASCII编码解析,所以出现一些方块乱码

    应该是:第一种情况是将联通的gb2312编码C1AA CDA8当成Unicode(little endian)编码解析

  5. Pingback: 佐拉Ⓥ

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据