常用的小工具“记事本”的小Bug

字体 -
标签:

我们常用的小工具,系统中附件里的“记事本”工具,有个比较有意思的BUG,让我们按以下步骤来看看。

1. 在开始菜单的附件里打开记事本
2. 复制引号中的内容,粘贴到记事本里“AAAA BBB CCC DDDDD”
3. 把它保存到桌面上,文件名任意,然后关闭记事本程序
4. 在桌面上打开刚才保存的文件
现在看到的都是一个个黑色的格子。而刚才输入的内容都不见了,是不是很有意思呢,我们再把记事本删除,再粘贴一下刚复制的内容,保存并关闭记事本。再次打开该文件,现在又可以正常显示文件内容了,呵呵是不是很有趣呢。
在实验中发现,如果打开记事本,输入“联通”也可以达到同样的效果,呵呵,我们可爱的记事本是不是非常有趣呢。
我对windows记事本bug的解释

这个bug在windowsXP sp1,sp2中都用,其他版本的windows是否有我没试过,不过我估计windows2000和2003都会存在。

bug演示:
记事本新建一个文本,打开以后输入: 联通 这两个字, 保存 ,关闭记事本。
再打开,你看看变成什么了?
有一个开玩笑的说法是因为中国联通把微软中国得罪了……
其实我看就是微软中国那帮家伙水平不行,对多语言编码弄得不好造成的
我分析了一下原因,
记事本保存的时候,默认使用ansi编码
但是用ansi编码呢,联通这两个字的开头正好是:fffe….. 这样的,于是再打开呢,他就以为是utf-8编码了,但是按照utf-8来解码呢,却造成乱码了。
我解释完毕,你满意否?
之所以我会想起来解释这个bug,是由于最近开发一个软件涉及到一些编码方面的问题,微软windows这个bug弄得我的软件生成的文件到现在还无法正常移植到其他平台上。

我再具体进行分析一下:
以下是“联通”二字在不同编码下的16进制代码:
FF FE 54 80 1A 90 (Unicode)
FE FF 80 54 90 1A (Big Unicode)
FF FE 54 80 1A 90 (UTF-8)
FF FE 6A 00 68 03 (ANSI)
可以看出来,Unicode和UTF-8编码下,联通二字的编码是一样的,而Big Unicode是和Little Unicode(简称Unicode)正好相反的编码方式,一般Intel体系的计算机用Little Unicode编码效率较高。而文件头FF FE和FE FF则被微软用来作为区分文件是Little Unicode还是Big Unicode的标志。同时呢,由于UTF-8也是缘于Unicode编码方式的,微软就在UTF-8编码的文件前面也加上了FF FE用来作为标志。
可是这样一来,用ANSI编码保存的文件就出问题了,因为联通二字的ANSI编码正好是以FFFE开头的,这样以ANSI编码保存以后再次打开,记事本首先检测到FFFE,就认为是UTF-8编码了,于是按照UTF-8编码打开以后就会显示为乱码。

利用这个原理,大家可以试试,找到以ANSI编码保存时开头为FFFE的其他文字,同样可以实现和 联通二字在记事本中造成的bug一样的效果

201613W2.jpg

分享博文至:

    目前没有评论

发表评论