记事本的一个BUG

发表于:2015-2-25 10:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:hefenghhhh    来源:51Testing软件测试网采编

  我们常用的小工具,系统中附件里的“记事本”工具,有个比较有意思的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弄得我的软件生成的文件到现在还无法正常移植到其他平台上。
  呵呵
  shinzeal 2005-1-29 04:53 PM
  我再具体进行分析一下:
  以下是“联通”二字在不同编码下的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一样的效果
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号