一、各种字符编码
1、ASCII字符集
ASCII字符集是针对英语设计的。
7位ASCII字符集由128个字符组成,包括大小写字母、数字0~9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃)。
2、 非ASCII字符集
(1)GB2312-1980编码 :中文编码,汉字都采用双字节编码。
(2)GB18030:针对GB2312的扩展,编码的汉字更多 ,其编码长度为1~4个字节。
3、Unicode字符集
(1)为了使国家信息交流更加方便,国际组织制定了Unicode字符集。它为各种语言的每一个字符规定了统一并且唯一的字符,这种编码只占用2个字节就可以表示地球上绝大部分地区的文字。
(2)在C#中字符默认都是Unicode码
(3)由于它比ASCII占用大一倍的空间,为了解决这个问题,又出现了一些中间格式的字符集,它们被称为通用转换格式,即UTF,目前流行的UTF格式有UTF-8、UTF-16以及UTF-32。
二、Encoding类,位于System.Text命名空间下
名称 | 说明 | |
---|---|---|
ASCII属性 | 获取 ASCII(7 位)字符集的编码。 | |
WebName | 在派生类中重写时,获取在 Internet 编号分配管理机构 (IANA) 注册的当前编码的名称。 | |
BodyName | 在派生类中重写时,获取可与邮件代理正文标记一起使用的当前编码的名称。 | |
CodePage | 在派生类中重写时,获取当前 Encoding 的代码页标识符。 | |
UTF8 | 获取 UTF-8 格式的编码。 | |
Default | 获取操作系统的当前 ANSI 代码页的编码。 | |
UTF7 | 获取 UTF-7 格式的编码。 | |
EncodingName | 在派生类中重写时,获取当前编码的可读说明。 | |
HeaderName | 在派生类中重写时,获取可与邮件代理标题标记一起使用的当前编码的名称。 | |
UTF32 | 获取使用 Little-Endian 字节顺序的 UTF-32 格式的编码。 | |
Unicode | 获取使用 Little-Endian 字节顺序的 UTF-16 格式的编码。 | |
方法 | Convert | 将字节数组从一种编码转换为另一种编码。 |
GetBytes | 将一组字符编码为一个字节序列 | |
GetString | 将一个字节序列编码为一个字符串 | |
GetEncoder | 获取一个解码器,该解码器将Unicode字符序列转换为已编码的字节序列。 | |
GetDecoder | 在派生类中重写时,获取一个解码器,该解码器将已编码的字节序列转换为字符序列。 |
GetEncodings | 返回一个数组,包含所有的编码。 |
GetEncoding(Int32) | 返回与指定代码页标识符关联的编码。 | |
GetEncoding(String) | 返回与指定代码页名称关联的编码。 |
1、获取所有的编码名称及其描述信息
ListBox1.Items.Add(string.Format("{0:-18}{1}", "Name", "EncodingName"));
2、不同编码之间的转换
结果为:
该字符串包含unicode字符Pi(Π)
三、Encoder类和Decoder类
1、Encoder类位于System.Text命名空间下,利用它可以将一组字符转换为一个字节序列。利用Encoder类对字符进行编码时,首先要获取Encoder类的实例,因为Encoder的构造函数为protected,因此不能直接实例化,而要借助Encoding提供的GetEncoder方法创建实例。
//获取ASCII编码的Encoder实例
Encoder asciiEncoder=Encoding.ASCII.GetEncoder();
2、GetByteCount方法,
计算对指定字符数组中的一组字符进行编码所产生的字节数,GetByteCount(char[] chars(包含要编码的字符集的字符数组),int index,int count,bool flush(是否清空内部缓存状态))
char[] chars = new char[]
结果为:
#%Π
3、Decoder类将已编码的字节序列解码为字符序列。
Response.Write(strResult);
结果为:Pn捩