tomato 30/6/2008 15:43
微软都知道移动比联通牛?
如果你的电脑操作系统是win2000或winxp的话,
那么: 1、在桌面上点右键,选择新建-文本文档;
2、打开"新建文本文档",录入"移动"两字后存盘退出;
3、重新打开"新建文本文档",看到什么了?
4、是不是刚刚录入的"移动"两字?
咱们换过来
1、在桌面上点右键,选择新建-文本文档;
2、打开"新建文本文档",录入"联通"两字后存盘退出;
3、重新打开"新建文本文档",看到什么了?
4、是不是刚刚录入的"联通"两字不见了,取而代之是个烧焦的手机电池的模样?
是真的你就顶一下
……我是vista的,“联通”打开以后是三个口
小小强 30/6/2008 21:31
是的 是一个黑色的口
LZ能解释一下么?好奇ING
只喝可乐的鱼 1/7/2008 01:19
[size=5][color=magenta][b][u]我也试了下,果然。。。[/u][/b][/color][/size]
[size=5][color=magenta][b][u]于是很好奇,去找了下原因,结果如下:(不过,基本是没看懂:80000 )[/u][/b][/color][/size]
[font=宋体][size=5][color=magenta][/color][/size][/font]
[font=宋体][size=5][color=magenta][b]笑话当然是笑话,不能当真。但为什么会这样呢?是微软的bug吗?确实有点像,不过——微软是世界顶级的软件公司,记事本则有可能是windows中最简单应用程序,说这是bug未免有点不合情理吧?[/b][/color][/size][/font]
[b][font=宋体][size=5][color=#ff00ff][/color][/size][/font][/b]
[font=宋体][size=5][color=magenta][b]好了,既然把自己的主观臆断否定了,就让我们踏上寻找事实真相的艰苦历程吧:)。[/b][/color][/size][/font]
[font=宋体][size=5][color=magenta][b]不知你注意过没有,记事本的打开、保存对话框比普通的文件对话框多一个编码选项,可以通过它指定文件的编码是UNICODE、ANSI还是UTF8。"喔,我知道了",你可能会说,"这肯定是windows api IsTextUnicode惹的祸。因为文本文件本身不保存编码信息,所以记事本打开文件时就要调用IsTextUnicode来判断文件的编码。而IsTextUnicode是根据文本的内容猜测其编码,所以肯定是它猜错编码格式了。想想‘联通''只有两个字,这样的错误有情可原,OK了,问题解决了"。[/b][/color][/size][/font]
[b][font=宋体][size=5][color=#ff00ff][/color][/size][/font][/b]
[font=宋体][size=5][color=magenta][b]说实话,一开始我也是这么想的,但后来发现,我犯了两个错误。①IsTextUnicode并没有猜错,不信你可以检查一下IsTextUnicode("联通", 4, NULL)的返回值。②记事本有可能保存编码信息,这个后面再说。[/b][/color][/size][/font]
[b][font=宋体][size=5][color=#ff00ff][/color][/size][/font][/b]
[font=宋体][size=5][color=magenta][b]原来,记事本除了判断编码是不是UNICODE以外,还要判断它是不是UTF8。"联通"两个字的代码是(字节顺序从低到高):C1 AA CD A8,转换为二进制是:11000001 10101010 11001101 10101000。对照UTF8编码方案(详情请见[/b][/color][/size][/font][url=http://www.cis.ohio-state.edu/htbin/rfc/rfc2279.html][font=宋体][size=5][color=magenta][b]http://www.cis.ohio-state.edu/htbin/rfc/rfc2279.html[/b][/color][/size][/font][/url][font=宋体][size=5][color=magenta][b]): [/b][/color][/size][/font]
[font=宋体][size=5][color=magenta][b]
0000-007F之间的字符不做转换
0080-07FF之间的编码为110xxxxx 10xxxxxx
0800-FFFF之间的编码为1110xxxx 10xxxxxx 10xxxxxx
不难发现,"联通"的编码符合第二种情况,所以记事本把它判定为UTF8编码,而对其进行解码后,将变成00000000 01101010 00000011 01101000。注意:前两个字节解码后并不在0080--07FF之间,所以被认为是错误的值,忽略了。后面两个字节经过调整字节顺序后,将变为16进制的0x0368,也就是那块烧毁的电池了(取决于所使用的字体)。
[/b][/color][/size][/font]
[font=宋体][size=5][color=magenta][b]PS: [/b][/color][/size][/font]
[font=宋体][size=5][color=magenta][b]1. 如果你保存文件时,指定使用除ANSI以外的编码,记事本将用文件开头的几个字节保存文件编码,UNICODE对应0xFEFF,UNICODE BIG ENDIAN对应0xFFFE,UTF-8对应0xBFBBEF。这几个字节被称为BOM(byte order mark, 字节顺序标记)。如果文件有BOM,记事本直接使用它判断编码,否则它就根据文件内容判断编码。[/b][/color][/size][/font]
[b][font=宋体][size=5][color=#ff00ff][/color][/size][/font][/b]
[font=宋体][size=5][color=magenta][b]2. 分析的过程中我用ultra edit来查看文件的16进制内容,但它会自动进行编码转换并给文件加上一个BOM,导致看到的和实际不符(文件4字节,到了ultraedit中就成了6[/b][/color][/size][/font]
[font=宋体][size=5][color=magenta][b]字节),让我走了一些弯路。[/b][/color][/size][/font]
[b][font=宋体][size=5][color=#ff00ff][/color][/size][/font][/b]
[b][font=宋体][size=5][color=#ff00ff][/color][/size][/font][/b]
yanbing_sun 1/7/2008 01:53
我实验的结果有那么点不同也
我首先输入了繁体字“联通”,然后,save,再打开,没有问题
接着输入简体字,在按save的时候出现了提示框,This file contains characters in Unicode format which will be lost if you save this file as an ANSI encoded text file. To keep the Unicode information, click cancel below and then select one of the Unicode options from the encoding drop down list. Continue? 我没有按cancel,再打开,就变成了“?通”
我想看一下网页储存形式下会有什么变异,于是,就用".html"再save一次,上面的对话框一样弹出,我一样不理,果然,连“通”字都不能显示了,显示出“?³q“这样的怪字符
不过由始至终,我没有出现过烧焦的电池板
个人觉得,除了编码原因以外,和汉字词语辨识也有点关系吧,”移动“是一个常用词,而”联通“则不是。
yanbing_sun 1/7/2008 14:54
用吃奶的力看也不明白