编码集——解码和编码
一、字节串和字符串
字符是我们人正常认识的,这些符号保存到计算机中就是以计算机可以识别的字节的形式。
二、编码集
1、ASCLL编码:
127个字母 8个数据位 最多0x7F

2、GB2312编码
每个汉字占据2字节(高位和低位),16个数据。GB2312是对ASCLL的中文扩展,共包含7000多个汉字。是计算机发展到中国后发展起来的编码,检测高位和低位,如果 同时大于 0x7F,则认为是GB2312,否则认为是ASCLL编码。
3、GBK(1995)和GB18030(2005/2000)
每个汉字占据2个字节,由于汉字数量太大,GB2312不能满足需求。GBK包括了GB2312的所有内容,同时增加了近20000个新的汉字(包括繁体)和符号。只要高位大于 0x7F,低位可以小于0x7F,认为是中文。
国家标准 GB18030-2000《信息交换用汉字编码字符集基本集的补充》是我国继GB2312-1980和GB13000-1993之后最重要的汉字编码集标准,包含我国少数民族文字,其中收录汉字70000余个。
4、Unicode编码
定长存储,将所有语言都统一到一套编码集,通常使用2个字节,有的是4个字节。收录很全。分为17个面,基本面采用2个字节,普通中文字也在基本面,另外16个面是4字节。
不兼容ASCLL码,即存储的时候,对ASCLL码前面补0,导致存储的数据变大。
5、utf-8——变长存储
国际标准组织(ISO)制定英文字符使用1个字节,沿用原来的ASCLL码
使用1~4个字节表示一个符号,中文存储使用3个字节(ASCLL码中的内容用1个字节保存/欧洲的字符用2个字节保存/东亚的字符用3个字节保存/特殊符号用4个字节)
Unicode是内存编码表示方案(规范),而utf-8是如何保存和传输 Unicode 方案(实现)
优点:虽然内存汇总的数据都是Unicode,但当数据保存到磁盘或者用于网络传输时,使用utf-8会节省更多的流量和硬盘空间。
如何判断几个字节表示一个字符:
每个字节添加识别位,其中高位识别位为4位,低位识别位为2位。判断高位字节开头有几个1,可以确定共有几个字节来表示一个字符。
6、utf-8和Unicode对应关系
utf-8去掉识别位,变成Unicode
三、编码和解码
编码:将字符转换为对应的二进制序列的过程叫做字符编码
解码:将二进制序列转换为对应的字符的过程叫做字符解码

在C#中:
C# 的所有源代码文件,默认编码为 UTF-8,注意,是源代码文件,而不是 C# 中的 string。
C# 中的所有 string,默认编码均为 Unicode (UTF-16)。
C# 产生的 ASP.NET 源代码,如 ASPX/CS,在浏览器响应回去客户端之后,编码默认为 UTF-8。可以通过 ContentType 请求头信息更改默认编码。比如:ContentType: application/json, charset=utf-8。
C# 中可以用 System.Text.Encoding.ASCII 提供的相关方法,把默认 Unicode 编码的字符串转换为 ASCII。详细请参考 GetString,GetBytes,GetByteCount 等方法。
此部分参考文章:点这里
四、字符编码转换

参考文章:点这里

浙公网安备 33010602011771号