编码集——解码和编码

一、字节串和字符串

字符是我们人正常认识的,这些符号保存到计算机中就是以计算机可以识别的字节的形式。

二、编码集

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 等方法。
此部分参考文章:点这里

 

四、字符编码转换

参考文章:点这里

 

posted @ 2022-07-14 10:15  xunzf  阅读(261)  评论(0)    收藏  举报