C#常见编码⽅式总结
⼀、概念
我们知道计算机是基于⼆进制来表⽰数据的,那么对于字母和汉字等字符⽤⼆进制如何表⽰?
这就需要⽤⼀种编码⽅式将这些字母或者符号转换⼆进制表⽰。⾸先需要对字符集进⾏编码表⽰,每个编码代表⼀个固定的字符,然后再将字符的编码转换成⼆进制表⽰。
计算机常⽤字符的编码主要分为两种: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编码见:www.chi2ko/tool/CJK.htm
BOM(Byte Order Mark)是⽤来区分字节序列和编码⽅式的(UTF-8,UTF-16,UTF-32)。unicode码和ascii码区别
三、 ASCII
ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是⼀套基于拉丁字母的字符编码。
我们都知道,⼀个字节由8位⼆进制数构成,所以1个字节共有2的8次⽅种组合。如果每⼀种⽅式可以表⽰⼀个字符的话,那么1字节可以表⽰256个字符。ASCII 码就是描述英⽂字符和8 位⼆进制数的对应关系。
ASCII 码对照表定义了 128 个字符,包含 33 个控制字符和 95 个可显⽰字符。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。