“给定一个字符,对应各类字符集编码后的二进制形式究竟是什么样子?”,对于这个问题,我本身也不甚清楚。并且平常工做中,每次遇到这个问题都是靠一款叫作 CodeView 的工具解决。因此接下来不涉及具体的编码过程,只对基本概念、各平台下的字符集转换作介绍。html
本文为第一部分,对经常使用字符集编码作概念性介绍。如下是查阅维基百科和牛人博客后,我本身的一种理解,并不必定十分准确。首先,要来理解两个概念:工具
字符集:编码
字符与二进制码一一对应的集合。spa
字符编码:code
存储和解析字符集中的二进制码。而不一样字符集收录的字符数目不一样,规模不一样,因此不一样字符集的编码规则是不一样的,但同一字符集的编码规则是相同的。因此不少时候,字符集定下来,其编码规则也就定下来。orm
接下来就介绍几种经常使用的字符集(编码)htm
EBCDIC(Extended Binary Coded Decimal Interchange Code):blog
扩增二进式十进交换码,IBM指定的一个字符编码表,在AS/400等系统上使用,平时几乎不太能见到。ip
ACSII:内存
包含英文字母在内的128个常见字符集,因此每一个字符的编码长度为:1 字节。
Unicode:
统一码,几乎涵盖世上全部的符号。只定义了字符与二进制码的对应关系,未定义二进制码的存储、解析规则。
UTF-8(8-bit Unicode Transformation Format):针对Unicode的可变长字符编码。每一个字符的编码长度为:1 ~ 6 字节。
UTF-16:也是一种针对Unicode的可变长字符编码。每一个字符的编码长度为:2 ~ 4 字节。
GBK:
汉字内码扩展规范,是对GB2312(即CP936)的扩展,收录了汉字及图形符号。通常不特殊说明,GB23十二、CP93六、GBK都指的是GBK。
每一个字符的编码长度为: 1 ~ 2 字节。
根据上面介绍,有些时候须要用多个字节来表示一个字符,那么就要关注一下内存的存储方式啦。
LE(Little Endian):
小字端存储,低位数字在前,放在低位。如,十六进制0x1234,存储后为:0x34 0x12
BE(Big Endian):
大字端存储,高位数字在前,放在低位。如,十六进制0x1234,存储后为:0x12 0x34
参考连接:
字符编码笔记:ACSII,Unicode和UTF-8 (其实基本就是这篇的阅读笔记)