04_编码

    • 一区位码两个字节
    • 二国际码两个字节
    • 三国标码GB2312GBKGB18030等都是国标两个字节
    • 四GB2312即交换码机内码两个字节
    • 五GBK两个字节
    • 六GB18030可变字长124字节都有
    • 七unicode统一码万国码单一码可变字长
    • 八UTF-8
    • 九UTF-16
    • 十UTF-32
    • 十一ucs-2

中文编码:区位码、国际码、国标码(GB2312、GBK、GB18030等)
国标:unicode,unicode只是一个统称,具体的有UTF-8… …
1-6讲的是中文编码,7以后是国标

链接:
1、http://blog.csdn.net/Dia_Vampire/article/details/39928493
2、https://segmentfault.com/q/1010000004240543/a-1020000004241172
3、https://blog.poxiao.me/p/unicode-character-encoding-conversion-in-cpp11/

一、区位码(两个字节)

1、四位十进制数字表示;
2、1980年,为了使每个汉字有一个全国统一的代码,我国颁布了汉字编码的国家标准:GB2312-80《信息交换用汉字编码字符集——基本集》,这个字符集是目前国内所有汉字系统的统一标准。它规定了用两个字节来表示一个汉字,每个字节都只能使用低7位,共有128*128种状态,又由于ASCII中的控制代码在汉字系统中也要使用,所以只剩下94*94=8836种状态用来表示国标码规定的6763个汉字和682个全角字符。每个字符都对应了唯一的区位码、国标码和机内码;
3、区位码是一个四位的十进制数,前两位叫做区码,后两位叫做位码。区位码共有94个区(行),每个区有94个位(列);
4、区位码不能用于通信,因为它可能与通信使用的控制码(00H~1FH)发生冲突。

二、国际码(两个字节)

1、四位十六进制数表示;
2、为了进行汉字通信,将区位码的区码和位码都加20H,避开了控制码,就得到了国标码。
3、貌似说是为了避开acii的前32个控制字符,以及利用acii的后面可用字符,就将区位码向后移动了32个字符,就是加上0x20;
4、国际码=区位码+32(0x20)

三、国标码(GB2312、GBK、GB18030等都是国标)(两个字节)

1、四位十六进制数表示;
2、由于汉字与英文字符通常混用,所以汉字信息如不加以特殊标识就会与ASCII码混淆,如汉字“学”的国标码为51 27H,在ASCII中代表“Q”和“‘”。此问题的解决方法之一是将汉字编码每字节的最高位置为1,即国标码两字节分别+80H,则汉字“学”的机内码为D1A7H;
3、机内码用十六进制表示;
4、GB2312简体中文编码表是机内码对照表。
5、国标码=国际码+0x8080=(区位码+0x2020)+0x8080=区位码+0xA0A0 ;
6、国际码=区位码+0x2020 ;

四、GB2312(即交换码,机内码)(两个字节)

五、GBK(两个字节)

六、GB18030(可变字长,1、2、4字节都有)

1、GB18030 是中国的标准,国标(GB),就是如何表示一个字符。Unicode只给出了一个字符的编号,并没有规定如何表示(或者说保存),UTF-8规定了如何表示。所以说,GB18030 和 unicode+utf-8 是不同的字符表示方式,一个是中国制定的标准,一个是国际上的组织制定的标准。
2、计算机被发明的时候,人们认为不会像现在这么流行,所以包括控制字符在内人们只定义了包括控制字符在内的128种符号,这就是 ASCII。
3、后来计算机流行到非英语国家,那么他们有自己的语言需要计算机显示。由于ASCII符号只有128个,而计算机一个字节有8位,所以还有128个冗余,于是他们用剩余的128个冗余表示他们自己国家的文字。不同的国家把这128个(其实是95个)定义成不同的字符,分别叫做ISO8859-1(Latin-1),ISO8859-2(Latin-2)…..ISO8859-16(Latin-10)。额,中间有一部分不叫 Latin(好坑人呀)
3、但是在东亚,就说中国吧,128个显然表示不了所有的汉字。所以就只能用两个字节表示一个汉字。于是规定,原始的 ASCII 还是用一个字节表示,使用连续两个字节(这两个字节值都大于128)表示一个汉字。一共可以表示128×128=16384个汉字(实际没有那么多),叫做 GB2312。后来人们发现自己太傻,其实第一个字节大于128的话,我们用连续两个字节表示一个汉字也不会出现歧义,所以规定,如果当前字节小于128那么就是标准的 ASCII,如果当前字节大于128就用当前字节和后面那个字节表示一个汉字,所以可以表示(128×256=32768)个汉字,然后补充了一部分汉字,叫做 GBK。在此基础上又增加了一部分汉字,这个版本叫做 GB18030。

七、unicode(统一码、万国码、单一码)(可变字长)

1、缘由:不同的国家有不同的标准,所以当大家交流的时候就不方便。因此一些组织开始着手统一全部的字符集,叫做 Unicode。
2、UTF-8是一种变长编码,对于一个Unicode的字符被编码成1至4个字节。
3、Unicode是计算机领域的一项行业标准,它对世界上绝大部分的文字的进行整理和统一编码,Unicode的编码空间可以划分为17个平面(plane),每个平面包含2的16次方(65536)个码位。17个平面的码位可表示为从U+0000到U+10FFFF,共计1114112个码位,第一个平面称为基本多语言平面(Basic Multilingual Plane, BMP),或称第零平面(Plane 0)。其他平面称为辅助平面(Supplementary Planes)。基本多语言平面内,从U+D800到U+DFFF之间的码位区段是永久保留不映射到Unicode字符,所以有效码位为1112064个。

八、UTF-8

1、可变编码,有1、2、3、4字节之分。由相应的unicode字符编码加上特定的格式转化而来。
2、
Unicode编码           UTF-8编码(二进制)
U+0000 – U+007F      0xxxxxxx
U+0080 – U+07FF      110xxxxx 10xxxxxx
U+0800 – U+FFFF      1110xxxx 10xxxxxx 10xxxxxx
3、。。。

九、UTF-16

十、UTF-32

十一、ucs-2

你可能感兴趣的:(杂项)