记事本不能显示“联通”二字的原因

如果你将“联通”二字在电脑的“记事本”里输入,关闭之,再打开,呵呵,变了——变成了一个方块儿!奇怪不奇怪?金小伟的博客 中提到的就是这种现象。我在这里做一个回答。别着急,你先把“记事本”打开,重新写一个“联通”,不要点击“保存”,点击“另存为”,在对话框选择编码的地方,选择“Unicode”。好了,把“记事本”关闭了吧。再打开。怎么样?不变了吧? 这是编码的问题,和联通、移动没有关系。如果你想知道具体的解答,往下看吧,有点枯燥。大家知道,计算机是美国人发明的,而美国人使用的是英文字母,英文字母只有26个,根据这26个英文字母,我们组合成许许多多的文字。在计算机里,每一个可以开合的晶体管,专家们为了方便,就命名为“字节”。晶体管开,是一种状态;晶体管关,又是一种状态。如果八个这样的晶体管并列,将会有多少种状态呢?告诉你吧,是2的8次方,256种状态。这256种状态怎么利用呢?美国人很聪明,他们将0到20这些数字,分别对应不同的命令,让电脑做出不同的动作。 他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。大家看到这样,都感觉很好,于是把这个方案叫做 ANSI 的"Ascii"编码(American Standard Code for Information Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。后来,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128到255这一页的字符集被称"扩展字符集"。从此之后,大家一位万事大吉了,可以好好歇一会儿了。可是没有想到我们中国的汉字呢!等到中国用计算机的时候,  不得不考虑,如何才能将汉字装入电脑。思来想去,大家决定那些127号之后的奇异符号们直接取消掉,规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,这样我们就可以组合出大约7000多个简体汉字了。除此之外,我们将数字、标点、字母都统统重新编了两个字节长的编码。这就是传说中的“全角”字符,而127以下的就是“半角”字符。这种编码方案被我们称之为“GB2312”。显然,GB2312扩展了 ASCII 。后来,有些人名地名中的生僻字还是输入不进去,怎么办呢?扩展!于是将原来没有用到的码位找出来,用上。后来发现,还是不够用,怎么办?那就干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。这种编码方案叫做“GBK 标准”。后来,我们少数民族也要用电脑,又要加上几千个少数民族的字,怎么办?再扩展。GBK 扩成了 GB18030。记住,这些都是中国自己搞的编码方案。世界上有很多国家,它们都和中国一样,搞了一套自己的编码方案。即使是台湾,他们的编码方案和大陆也不一样。这样一来,就很麻烦。大家各执己见,就乱了套。于是国际标准出来了。一个叫 ISO (国际标谁化组织)的国际组织决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码!他们打算叫它"Universal Multiple-Octet Coded Character Set",简称 UCS, 俗称 "UNICODE"。 ISO 直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ascii里的那些“半角”字符,UNICODE 包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。这个标准出来之后,当然大家是比较欢迎的,虽然说浪费了一点空间,但是计算机性能不是也上来了吗?咱不在乎。对应的,计算机在传递数据的时候,就采用了新的标准。其中UTF8传输标准,就是每次8个位传输数据,成为了记事本的默认标准。当我们在输入“联通”这两个字的时候,我们采用的是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,这个字符什么也不是。这就是只有"联通"两个字的文件没有办法在记事本里正常显示的原因。   而如果你不仅仅输入“联通”这两个字,或者不采用默认的保存方式,就不会发生这样的误会了。你可以试试!


注:本文为转载文章.原出处:点击打开链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值