一、概念
我们知道计算机是基于二进制来表示数据的,那么对于字母和汉字等字符用二进制如何表示?
这就需要用一种编码方式将这些字母或者符号转换二进制表示。首先需要对字符集进行编码表示,每个编码代表一个固定的字符,然后再将字符的编码转换成二进制表示。
计算机常用字符的编码主要分为两种:Unicode码与ASCII码。
二、Unicode
Unicode 是一种标准的编码系统,可以用于几乎所有语言的字符的编码,Unicode的出现是因为ASCII等其他编码不能适应更多的字符编码需求。
每个字符使用 0 和 0x10FFFF 之间的唯一整数码位进行编码,而其中编码就是一个将一组 Unicode 字符转换为一个字节序列的过程。
2.1 编码方式
Unicode 标准为所有字符都分配一个码位,其中Unicode 转换格式 (UTF) 是一种码位编码方式。有三种编码方式,如下所示:
UTF-8,它将每个码位表示为一个由 1 至 4 个字节组成的序列,极少数用4~6个字节存储。它的规则如下: 1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。 2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
在C#中,System.Text.Encoding.Unicode与System.Text.Encoding.UTF8的区别:Windows默认的Unicode实现是UTF-16,所以C#中Encoding.Unicode就是UTF-16,与UTF8不同。
UTF-16,介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。UTF-16是分区定义的,每个区可以存放 65536 个字符,为1个平面,共有17个平面。分为基本平面BMP 和辅助平面SMP。常见的字符都在BMP中。
UTF-32,一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储。
中文对应的Unicode编码见:http://www.chi2ko.com/tool/CJK.htm
BOM(Byte Order Mark)是用来区分字节序列和编码方式的(UTF-8,UTF-16,UTF-32)。
三、 ASCII
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码。
我们都知道,一个字节由8位二进制数构成,所以1个字节共有2的8次方种组合。如果每一种方式可以表示一个字符的话,那么1字节可以表示256个字符。ASCII 码就是描述英文字符和8 位二进制数的对应关系。
ASCII 码对照表定义了 128 个字符,包含 33 个控制字符和 95 个可显示字符。
ASCII 码对照表
彻底弄懂 Unicode 编码
版权归原作者 人狮子 所有, 如有侵权,请联系我们删除。