编码 ASCII, GBK, Unicode+utf-8
0.
1.参考
阮一峰 字符编码笔记:ASCII,Unicode 和 UTF-8
2.总结
美国 ASCII 码 发音: /ˈæski/ :128个字符,只占用了一个字节的后面7位,最前面的一位统一规定为0
。
非 ASCII 编码:
- 欧洲:ISO 8859-1,又称Latin-1或“西欧语言”,以ASCII为基础,利用一个字节的最前面1位,加入了96个字母和符号。
- 中国:gb2312 >>> gbk(2万多,支持繁体,1字节或双字节)>>> gb18030
全球大一统 Unicode编码系统:可分为编码方式和实现方式两个层次。
- 编码空间有100多万个码位 code point 可用来映射字符,已收录十万个字符
- 存储和传输的具体实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)
- 从字节串判断若干个字节表示对应一个字符,如何节省空间) utf-8 变长编码(1字节或大部分3字节) 或 utf-16(2或4字节,不兼容ASCII编码)
3.资料
https://zh.wikipedia.org/wiki/%E9%80%9A%E7%94%A8%E5%AD%97%E7%AC%A6%E9%9B%86
通用字符集(英语:Universal Character Set, UCS)
表示一个UCS或Unicode值的十六进制数通常在前面加上“U+”,例如“U+0041”代表字符“A”。
https://zh.wikipedia.org/wiki/Unicode
Unicode编码系统可分为编码方式和实现方式两个层次。
统一码以一种抽象的方式(即数字)来处理字符,并将视觉上的演绎工作(例如字体大小、外观形状、字体形态、文体等)留给其他软件来处理,例如网页浏览器或是文字处理器。
在基本多文种平面(英文:Basic Multilingual Plane,简写BMP。又称为“零号平面”、plane 0)里的所有字符,要用四个数字(即两个char,16bit ,例如U+4AE0,共支持六万多个字符);在零号平面以外的字符则需要使用五个或六个数字。
一个字符的Unicode编码是确定的。但是在实际传输过程中,出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)
UTF-8编码,这是一种变长编码
此外Unicode的实现方式还包括UTF-7、Punycode、CESU-8、SCSU、UTF-32、GB18030等,这些实现方式有些仅在一定的国家和地区使用,有些则属于未来的规划方式。目前通用的实现方式是UTF-16小端序(LE)、UTF-16大端序(BE)和UTF-8。在微软公司Windows XP附带的记事本(Notepad)中,“另存为”对话框可以选择的四种编码方式除去非Unicode编码的ANSI(对于英文系统即ASCII编码,中文系统则为GB2312或Big5编码)外,其余三种为“Unicode”(对应UTF-16 LE)、“Unicode big endian”(对应UTF-16 BE)和“UTF-8”。
目前辅助平面的工作主要集中在第二和第三平面的中日韩统一表意文字中,因此包括GBK、GB18030、Big5等简体中文、繁体中文、日文、韩文以及越南喃字的各种编码与Unicode的协调性被重点关注。考虑到Unicode最终要涵盖所有的字符。从某种意义而言,这些编码方式也可视作Unicode的出现于其之前的既成事实的实现方式,如同ASCII及其扩展Latin-1一样,后两者的字符在16位Unicode编码空间中的编码第一字节各位全为0,第二字节编码与原编码完全一致。但上述东亚语言编码与Unicode编码的对应关系要复杂得多。
https://zh.wikipedia.org/wiki/UTF-8
UTF-8就是以8位为单元对UCS进行编码
提到“Unicode定义的区域,U+0000到U+10FFFF”,(注:自行折算为1114111,100多万。)
- 128个US-ASCII字符只需一个字节编码(Unicode范围由U+0000至U+007F)。
- 其他基本多文种平面(BMP)中的字符(这包含了大部分常用字,如大部分的汉字)使用三个字节编码(Unicode范围由U+0800至U+FFFF)。
码点的位数 | 码点起值 | 码点终值 | 字节序列 | Byte 1 | Byte 2 | Byte 3 | Byte 4 | Byte 5 | Byte 6 |
---|---|---|---|---|---|---|---|---|---|
7 | U+0000 | U+007F | 1 | 0xxxxxxx |
|||||
11 | U+0080 | U+07FF | 2 | 110xxxxx |
10xxxxxx |
||||
16 | U+0800 | U+FFFF | 3 | 1110xxxx |
10xxxxxx |
10xxxxxx |
|||
21 | U+10000 | U+1FFFFF | 4 | 11110xxx |
10xxxxxx |
10xxxxxx |
10xxxxxx |
https://zh.wikipedia.org/wiki/UTF-16
Unicode的编码空间从U+0000到U+10FFFF,共有1,112,064个码位(code point)可用来映射字符.
因为这个字超过U+FFFF所以无法用UCS-2的格式编码
16进制编码范围 | UTF-16表示方法(二进制) | 10进制码范围 | 字节数量 |
---|---|---|---|
U+0000---U+FFFF | xxxxxxxx xxxxxxxx yyyyyyyy yyyyyyyy | 0-65535 | 2 |
U+10000---U+10FFFF | 110110yyyyyyyyyy 110111xxxxxxxxxx | 65536-1114111 | 4 |
UTF-16比起UTF-8,好处在于大部分字符都以固定长度的字节(2字节)存储,但UTF-16却无法兼容于ASCII编码。
UTF-16可看成是UCS-2的父集。在没有辅助平面字符(surrogate code points)前,UTF-16与UCS-2所指的是同一的意思。但当引入辅助平面字符后,就称为UTF-16了。
https://zh.wikipedia.org/wiki/GB_2312
GB 2312标准共收录6763个汉字,不支持繁体。
(重定向自Gbk)
GBK的K为汉语拼音Kuo Zhan(扩展)中“扩”字的声母。
GBK共收录21886个汉字和图形符号。支持GB2312-80编码不支持的中文繁体。
GBK是一种编码方式并向下兼容GB2312。
字符有一字节和双字节编码,00
–7F
范围内是第一个字节,和ASCII保持一致,此范围内严格上说有96个文字和32个控制符号。
https://zh.wikipedia.org/wiki/GB_18030
对GB 2312-1980完全向后兼容,与GBK基本向后兼容;支持GB 13000(Unicode)的所有码位;共收录汉字70,244个。
采用变长多字节编码,每个字可以由1个、2个或4个字节组成。
https://zh.wikipedia.org/wiki/ISO/IEC_8859-1
ISO 8859-1
正式编号为ISO/IEC 8859-1:1998,又称Latin-1或“西欧语言”,是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入96个字母及符号,藉以供使用附加符号的拉丁字母语言使用。
https://zh.wikipedia.org/wiki/%E5%85%A8%E5%BD%A2%E5%92%8C%E5%8D%8A%E5%BD%A2
全角和半角,是计算机中,中、日、韩文的CJKV字符的显示格式。
传统上,英语或拉丁字母语言使用的电脑系统,每一个字母或符号,都是使用一字节的空间(一字节由8比特组成,共256个编码空间)来储存;
而汉语、日语及韩语文字,由于数量大大超过256个,故惯常使用两字节来储存一个字符。