如果你的电脑操作系统是win2000或winxp的话,那么:
1、在桌面上点右键,选择新建-文本文档;
2、打开"新建文本文档",录入"移动"两字后存盘退出;
3、重新打开"新建文本文档",看到什么了?
4、是不是刚刚录入的"移动"两字?
咱们换过来 :
1、在桌面上点右键,选择新建-文本文档;
2、打开"新建文本文档",录入"联通"两字后存盘退出;
3、重新打开"新建文本文档",看到什么了?
4、是不是刚刚录入的"联通"两字不见了,取而代之是个烧焦的手机电池的模样?
当你在 windows 的记事本里新建一个文件,输入"联通"两个字之后,保存,关闭,然后再次打开,你会发现这两个字已经消失了,代之的是几个乱码!呵呵,有人说这就是联通之所以拼不过移动的原因。”
其实这是因为GB2312编码与UTF8编码产生了编码冲撞的原因。
你新建一个文本文件时,记事本的编码默认是ANSI, 如果你在ANSI的编码输入汉字,那么他实际就是GB系列的编码方式,在这种编码下,"联通"的内码是:
c1 1100 0001
aa 1010 1010
cd 1100 1101
a8 1010 1000
注意到了吗?第一二个字节、第三四个字节的起始部分的都是"110"和"10",正好与UTF8规则里的两字节模板是一致的,
于是再次打开记事本时,记事本就误认为这是一个UTF8编码的文件,让我们把第一个字节的110和第二个字节的10去掉,
我们就得到了"00001 101010",再把各位对齐,补上前导的0,就得到了"0000 0000 0110 1010",不好意思,
这是UNICODE的006A,也就是小写的字母"j",而之后的两字节用UTF8解码之后是0368,这个字符什么也不是。这就是只有"联通"两个字的文件没有办法在记事本里正常显示的原因。
而如果你在"联通"之后多输入几个字,其他的字的编码不见得又恰好是110和10开始的字节,这样再次打开时,记事本就不会坚持这是一个utf8编码的文件,而会用ANSI的方式解读之,这时乱码又不出现了。