在上一篇中,字符编码的基本概念,各种常见问题都解决了,这儿分析如下几个编码问题。windows下记事本中“联通”bug,显示乱码?�的问题。大端小端问题。
还是先从一个故事开始吧。
Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重罚。然后老百姓对此法令极为反感,期间发生了多次叛乱,其中一个皇帝因此送命,另一个丢了王位,产生叛乱的原因就是另一个国家Blefuscu的国王大臣煽动起来的,叛乱平息后,就逃到这个帝国避难。据估计,先后几次有11000余人情愿死也不肯去打破鸡蛋较小的端吃鸡蛋。这个其实讽刺当时英国和法国之间持续的冲突。Danny Cohen一位网络协议的开创者,第一次使用这两个术语指代字节顺序,后来就被大家广泛接受。
在桌面上新建一个记事本文件,在里面输入联通两个字,然后保存,关闭,再打开,“联通”二字变成了��ͨ有人说这就是移动比联通强盛的原因。我也是醉了。“联通”的内码是0xC1(1100 0001), 0xAA(1010 1010),0xCD(1100 1101),0xA8(1010 1000)这两个字的起始部分的是"110"和"10",正好与UTF8规则里的两字节模板是一致的,于是再次打开记事本时,记事本就误认为这是一个UTF8编码的文件……当文档中所有字符(假设编码:AABB)都在(C0≤AA≤DF,80≤BB≤BF)