全球化编码

从C\C++\开始学编程的兄弟们确定对char这个基本类型有深入的理解。什么\0最为结束符,strlen和sizeof,字符串数组和char*的字符串,这部分基本上是学习C语言最早要面对的一个拦路虎。固然学习java、C#这些相对没有历史包袱的语言的时候,就不会感到这么坑爹了。java

实际上,对不起各位的是,char这个类型做为描述字符的载体,还有着其余的问题。咱们在下面简单说一些。(仅做为抛砖引玉,若是有什么缺陷,但愿你们不吝赐教)编程

  1. 对于老美来讲,char很完美。从char这个类型来讲,在C\C++的标准中,它占用8位,也就是最多支持256个字符,除去一个结束符,最多也就支持255个。C\C++这群人在一开始的时候,255个足够老美用了,就愉快的决定义了字符和一些制表符在char里面的表现方式。这就是ASCII。这里我多说一句,ASCII是一种编码格式,他表示的是一个码表(code set)在计算机里面的表现方法。咱们要区分清楚码表和编码这二者的区别。
  2. 对象形语系来讲,char不够用。当C\C++出海了以后,到了亚洲国家,人们就发现用char表示这么多汉字,根本就是强人所难。因此当时主要是中国、日本、韩国,各自定义了本身的码表和编码,基本上都是用更多的char来表示更多的字。好比说“啊”,在GB2312中,就用0xB0(第一个字节) 0xA1(第二个字节)储存。而且前0x00~0xFF与ASCII兼容。
  3. 对于不一样的拉丁语系来讲,char也很蛋疼。对于有重音的拉丁语系,例如à,它就须要占用ASCII表中128--255的部分。那么一样的是char,一样的值,对应不一样的拉丁语码表的时候,可能就会出现不一样的结果。
  4. 对于象形语系来讲,更加蛋疼。好比中国的“啊”再GB2312下是0xB0、0xA1,那么到了GBK下面,可能就是其余的字,由于GBK和GB2312的码表和编码都不同。

后来,你们发现了这个问题,对于一个程序,想要全球发布,就会面临很大的问题。因此后来人们就发明了另一种码表-Unicode。顾名思义,Unicode是把世界上全部的字符,都包含进来的一个超级大的码表。Unicode的基本思想就是,个人表里面什么都有,不管在任何语言的任何系统,只要支持Unicode,就能在表里面找到想要的字符。当前Unicode使用的是UCS-2(16位的),能够容纳65535个字符,基本上也够用了。编码方式有utf-1六、utf-3二、utf-8。由于utf-8对以前的一些字符串函数兼容性更好,因此如今普遍使用的就是utf-8。数组

 

好了,到如今为止,咱们一共提出了ASCII、亚洲的多字符编码、Unicode三种大的编码方式。那咱们要怎么选择,以及他们相互之间要怎么切换哪?等我有时间再说。函数

相关文章
相关标签/搜索