关于编码

2017-02-07  本文已影响0人  小小青蛙不怕风吹雨打

需要区分的概念

  1. 码点。字符对应的数字,唯一定义字符,编码的基础。最重要的一个是Unicode,其中UCS-2子集最常用。
  2. 编码。字符对应的字节数组,存储传输时总是要用字节保存下来的。如utf-8,utf-16(LE|BE)。

编程语言里字符串和字节数组的区别

语言 字符串 字节数组
C++ char[]
C# string byte[]
java String byte[]
python unicode str

c#的string,python的unicode,java的String才是字符串。他们默认是utf-16编码的。
c++里的字符串实际是字节数组

中文编码

虽然想只了解Unicode,然而GB系列编码经常遇到。
VS默认是GB2312编码,并且没有地方设置新建文件为utf-8编码(┬_┬)。

简单记录下:
ascii取值范围0x00-0x7f,共128字符。
汉字不够用。没问题,有个ANSI编码标准,只要求是编码中的ascii码要保持不变。
1980年,GB2312扩展ascii,有6763个汉字,682个符号,成为国家标准。
1995年,GBK扩展GB2312,有21886个汉字,883个符号。两个字节表示。这时微软定义的。
2000年,GB18030扩展GBK,包含更多汉字,加入民族语言,新加的字符有4个字节的,新的国家标准。
可以统称GB简体编码,一般GBK就够了。

ANSI标准有个弊端,不同的编码互相冲突。
Big5是繁体字编码,与GBK就不兼容。这个时候,Unicode就来救场了。
一个特别的地方,简体字和繁体字的unicode不重叠

收集的资料

wiki UTF-16
wiki UTF-8
彻底搞懂字符编码(unicode,mbcs,utf-8,utf-16,utf-32,big endian,little endian...)
UTF-16的特殊字符
字符编码笔记:ASCII,Unicode和UTF-8

上一篇下一篇

猜你喜欢

热点阅读