ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3713|回复: 12

[转帖]记事本中一个奇怪的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-4-18 22:51 | 显示全部楼层 |阅读模式

记事本中一个奇怪的问题
http://www.gshxyz.com/xbyd/forum_view.asp?forum_id=2&view_id=239

在记事本里第一行写
.LOG
然后保存,下次打开就有新发现

TA的精华主题

TA的得分主题

发表于 2007-4-18 23:06 | 显示全部楼层

意外收获,谢谢aichong!



[此贴子已经被作者于2007-4-18 23:09:55编辑过]
oUUQTfZS.gif
AsCXlQNU.gif
j85J0psY.gif

TA的精华主题

TA的得分主题

发表于 2007-4-19 07:54 | 显示全部楼层

还有一个功能-----微软是联通的仇人!

在记事本中输入联通,再次打开将看到一个烧焦的电池.

输入移动,再打开却仍是移动.

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-4-19 08:35 | 显示全部楼层
记事本怪现象
http://dzh.mop.com/mainFrame.jsp?url=http://dzh.mop.com/topic/readSub_7463220_0_0.html
打开记事本输入“Bush hid the facts”(布什隐藏事实真相),保存后再重新打开这个文本,如果你用的是中文版XP你会看到一串奇怪的汉字“畂桳栠摩琠敨映捡獴”,而在视频中的英文版XP是变成了一串方块。这个应该比较多人知道,还有好几种特定的字符串也会让记事本出现这样的怪现象。

TA的精华主题

TA的得分主题

发表于 2007-4-19 08:43 | 显示全部楼层
QUOTE:
以下是引用andysky在2007-4-19 7:54:36的发言:

还有一个功能-----微软是联通的仇人!

在记事本中输入联通,再次打开将看到一个烧焦的电池.

输入移动,再打开却仍是移动.

在Windows操作系统中使用记事本新建一个文本文件,在文件里面写入“联通”两个字并保存。当再次打开这个文本文件时候,在记事本中看到得却不是刚刚输入的“联通”,而是乱码。网络上有人把这个奇怪现象包装成把戏,如果你曾遇到过这种把戏就会知道,他们往往让你建立两个文本文件进行对比,其中一个输入“联通”,另外一个可能是“移动”等等,最后试图八卦地让你相信联通、移动和微软之间有着种种恩怨情仇。


[解释]
      这是一个字符编码应用的奇怪现象,讲的明白点,可以说是记事本开小差了!记事本为什么会犯错误?记事本犯了怎样的错误呢?也许你会迫不及待的想知道这些问题,如果是这样,我不会让你空腹而归的。
      在简体中文操作系统中默认的本地字符集编码是GBK编码,除非你在保存记事本文本文件时候选择了其他编码方式,否则用记事本录入的字符信息将使用GBK编码进行储存。巧合的是,“联通”这两个字符的GBK编码具有UTF-8编码的特征,记事本犯下的错误正是将GBK编码存放的记录有“联通”两个字符的文件误认为UTF-8编码的文件。或许你会问,UTF-8编码的文件不是以“EF BB BF”三个特殊字节开头吗?既然这样,记事本怎么会犯这么低级的错误呢?没错,UTF-8编码规定使用UTF-8编码的文件以“EF BB BF”三个特殊字节开头,但并不是强制性要求,早期的UTF-8编码文件就不遵循这个规定。因此记事本不能依靠文件的开头字节判断一个文件是否是UTF-8编码,而只能对文件中的数据进行简单的编码分析来确定。正是这个原因,才有了字符编码应用中的这个奇怪又无法避免的现象。

[细节]
      如果上面的解释对于你来说只是杯开胃红酒,那我还是块点把主食呈上吧,一份大峡谷香烤猪肋排。UTF-8编码采用1-3个字节对字符进行编码,编码字节数与字符的Unicode编码值有严格的对应关系,让我们回忆下UTF-8编码和Unicode的对应关系吧。

      Unicode编码值                              UTF-8编码结构
      \u0001 - \u007E                           0XXXXXXX
      \u0080 - \u07FF 和 \u0000            110XXXXX 10XXXXXX
      \u0800 - \uFFFF                            1110XXXX 10XXXXXX 10XXXXXX

      “联通”这两个字符的GBK编码值是“C1 AA CD A8",GBK编码方式使用两个字节对一个字符进行编码,因此以GBK编码方式存放的录有“联通”两个字符的文件的大小为四个字节。接下来分别观察“联通”这两个字符GBK编码值的二进制形式,你有发现有趣的事。

      联    GBK    十六进制:C1 AA    二进制:1100 0001,1010 1010
      通    GBK    十六进制:C1 AA    二进制:1100 1101,1010 1000

      请注意上面二进制数据的着色部分,你想到了什么?对,它们和UTF-8编码结构中的补充位完全一致,UTF-8编码的补充位使得编码值更有规律,而记事本刚好凭借这个特征区分UTF-8编码的文件。存有“联通”两个字符的文件的所有数据都符合这个特征,就是这样,记事本彻底的将文件误认为UTF-8编码的文件。
      将错就错,让我们来看看这个错误是怎样收场的。如果把“联通”的GBK编码值当作UTF-8编码值,那文件就成为一个写有数据“C1 AA CD A8”并以UTF-8编码的文件,当使用记事本再次打开的时候会看到什么呢?只要将UTF-8编码转换成Unicode编码就知道了。UTF-8编码“C1 AA CD A8”转换成Unicode编码后,编码值为“6A 00 68 03”(转换方法请参考本Blog中的《字符编码》一文)。0x006A这个Unicode编码值位于\u0001 - \u007E之间,若要转换为UTF-8编码,显然只能用一个字节进行编码,因此“联”的GBK编码“C1 AA”虽然特征上貌似UTF-8编码,但它却不对应任何一个UTF-8编码。接着看0x0368这个Unicode编码值,这个值对应了字符“ͨ”,这也正是我们将在记事本中看到的内容。或许你会说我看到的是一个黑色矩形啊,这只是字体的原因,你将字体改为宋体或者其他字体,看到的就是字符“ͨ”。
      对于中文字符,UTF-8编码要用三个字节进行编码,因此,如果你使用记事本录入“联通”,然后选择以UTF-8编码方式保存的话,文件大小应为9个字节(包含三个字节的开头数据),而同样的文件GBK编码却是4个字节。最后附上“联通”的GBK、UTF-8、Unicode编码值,以及记事本的错误思维。

      联通  GBK  C1 AA CD A8    UTF-8  E8 81 94 E9 80 9A    Unicode  54 80 1A 90
      联通  GBK  C1 AA CD A8    UTF-8  C1 AA CD A8            Unicode  6A 00 68 03  (将GBK值误认为UTF-8值的结果)

TA的精华主题

TA的得分主题

发表于 2007-4-19 15:17 | 显示全部楼层

满好玩的,能出来时间的呢

TA的精华主题

TA的得分主题

发表于 2007-4-19 19:51 | 显示全部楼层
版主博大精深,本菜由衷佩服呵呵~~~~~~

TA的精华主题

TA的得分主题

发表于 2007-4-20 22:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lfspecter 版主解释得很专业,佩服其博大精深的知识!谢谢分享。

TA的精华主题

TA的得分主题

发表于 2010-2-25 13:37 | 显示全部楼层
这个得好好看一看
之前也发现类似的情况,一直不明真理

TA的精华主题

TA的得分主题

发表于 2010-2-24 10:44 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-28 09:33 , Processed in 0.047340 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表