Encoding 类
.NET Framework 4
表示字符编码。
System.Object
System.Text.Encoding
System.Text.ASCIIEncoding
System.Text.UnicodeEncoding
System.Text.UTF32Encoding
System.Text.UTF7Encoding
System.Text.UTF8Encoding
命名空间: System.Text
程序集: mscorlib(在 mscorlib.dll 中)
C#
Encoding 类型公开以下成员。
显示: 继承 保护
名称
说明
Encoding()
初始化 Encoding 类的新实例。
Encoding(Int32)
初始化对应于指定代码页的 Encoding 类的新实例。
ASCII
获取 ASCII(7 位)字符集的编码。
BigEndianUnicode
获取使用 Big Endian 字节顺序的 UTF-16 格式的编码。
BodyName
在派生类中重写时,获取可与邮件代理正文标记一起使用的当前编码的名称。
CodePage
在派生类中重写时,获取当前 Encoding 的代码页标识符。
DecoderFallback
获取或设置当前 Encoding 对象的 DecoderFallback 对象。
Default
获取操作系统的当前 ANSI 代码页的编码。
EncoderFallback
获取或设置当前 Encoding 对象的 EncoderFallback 对象。
EncodingName
在派生类中重写时,获取当前编码的可读说明。
HeaderName
在派生类中重写时,获取可与邮件代理标题标记一起使用的当前编码的名称。
IsBrowserDisplay
在派生类中重写时,获取一个值,该值指示浏览器客户端是否可以使用当前的编码显示内容。
IsBrowserSave
在派生类中重写时,获取一个值,该值指示浏览器客户端是否可以使用当前的编码保存内容。
IsMailNewsDisplay
在派生类中重写时,获取一个值,该值指示邮件和新闻客户端是否可以使用当前的编码显示内容。
IsMailNewsSave
在派生类中重写时,获取一个值,该值指示邮件和新闻客户端是否可以使用当前的编码保存内容。
IsReadOnly
在派生类中重写时,获取一个值,该值指示当前的编码是否为只读。
IsSingleByte
在派生类中重写时,获取一个值,该值指示当前的编码是否使用单字节码位。
Unicode
获取使用 Little-Endian 字节顺序的 UTF-16 格式的编码。
UTF32
获取使用 Little-Endian 字节顺序的 UTF-32 格式的编码。
UTF7
获取 UTF-7 格式的编码。
UTF8
获取 UTF-8 格式的编码。
WebName
在派生类中重写时,获取在 Internet 编号分配管理机构 (IANA) 注册的当前编码的名称。
WindowsCodePage
在派生类中重写时,获取与当前编码最紧密对应的 Windows 操作系统代码页。
Clone
当在派生类中重写时,创建当前 Encoding 对象的一个浅表副本。
Convert(Encoding, Encoding, Byte[])
将整个字节数组从一种编码转换为另一种编码。
Convert(Encoding, Encoding, Byte[], Int32, Int32)
将字节数组内某个范围的字节从一种编码转换为另一种编码。
Equals
确定指定的 Object 是否等于当前实例。 (重写 Object.Equals(Object)。)
Finalize
允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetByteCount(Char[])
在派生类中重写时,计算对指定字符数组中的所有字符进行编码所产生的字节数。
GetByteCount(String)
在派生类中重写时,计算对指定字符串中的字符进行编码所产生的字节数。
GetByteCount(Char*, Int32)
在派生类中重写时,计算对一组字符(从指定的字符指针处开始)进行编码所产生的字节数。
GetByteCount(Char[], Int32, Int32)
在派生类中重写时,计算对指定字符数组中的一组字符进行编码所产生的字节数。
GetBytes(Char[])
在派生类中重写时,将指定字符数组中的所有字符编码为一个字节序列。
GetBytes(String)
在派生类中重写时,将指定字符串中的所有字符编码为一个字节序列。
GetBytes(Char[], Int32, Int32)
在派生类中重写时,将指定字符数组中的一组字符编码为一个字节序列。
GetBytes(Char*, Int32, Byte*, Int32)
在派生类中重写时,将一组字符(从指定的字符指针开始)编码为一个字节序列,并从指定的字节指针开始存储该字节序列。
GetBytes(Char[], Int32, Int32, Byte[], Int32)
在派生类中重写时,将指定字符数组中的一组字符编码为指定的字节数组。
GetBytes(String, Int32, Int32, Byte[], Int32)
在派生类中重写时,将指定字符串中的一组字符编码为指定的字节数组。
GetCharCount(Byte[])
在派生类中重写时,计算对指定字节数组中的所有字节进行解码所产生的字符数。
GetCharCount(Byte*, Int32)
在派生类中重写时,计算对字节序列(从指定的字节指针开始)进行解码所产生的字符数。
GetCharCount(Byte[], Int32, Int32)
在派生类中重写时,计算对字节序列(从指定字节数组开始)进行解码所产生的字符数。
GetChars(Byte[])
在派生类中重写时,将指定字节数组中的所有字节解码为一组字符。
GetChars(Byte[], Int32, Int32)
在派生类中重写时,将指定字节数组中的一个字节序列解码为一组字符。
GetChars(Byte*, Int32, Char*, Int32)
在派生类中重写时,将一个字节序列(从指定的字节指针开始)解码为一组字符,并从指定的字符指针开始存储该组字符。
GetChars(Byte[], Int32, Int32, Char[], Int32)
在派生类中重写时,将指定字节数组中的字节序列解码为指定的字符数组。
GetDecoder
在派生类中重写时,获取一个解码器,该解码器将已编码的字节序列转换为字符序列。
GetEncoder
在派生类中重写时,获取一个解码器,该解码器将 Unicode 字符序列转换为已编码的字节序列。
GetEncoding(Int32)
返回与指定代码页标识符关联的编码。
GetEncoding(String)
返回与指定代码页名称关联的编码。
GetEncoding(Int32, EncoderFallback, DecoderFallback)
返回与指定代码页标识符关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。
GetEncoding(String, EncoderFallback, DecoderFallback)
返回与指定代码页名称关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。
GetEncodings
返回包含所有编码的数组。
GetHashCode
返回当前实例的哈希代码。 (重写 Object.GetHashCode()。)
GetMaxByteCount
在派生类中重写时,计算对指定数目的字符进行编码所产生的最大字节数。
GetMaxCharCount
在派生类中重写时,计算对指定数目的字节进行解码时所产生的最大字符数。
GetPreamble
在派生类中重写时,返回指定所用编码的字节序列。
GetString(Byte[])
在派生类中重写时,将指定字节数组中的所有字节解码为一个字符串。
GetString(Byte[], Int32, Int32)
在派生类中重写时,将指定字节数组中的一个字节序列解码为一个字符串。
GetType
获取当前实例的 Type。 (继承自 Object。)
IsAlwaysNormalized()
使用默认范式获取一个值,该值指示当前编码是否始终被规范化。
IsAlwaysNormalized(NormalizationForm)
在派生类中重写时,使用指定范式获取一个值,该值指示当前编码是否始终被规范化。
MemberwiseClone
创建当前 Object 的浅表副本。 (继承自 Object。)
ToString
返回表示当前对象的字符串。 (继承自 Object。)
编码是一个将一组 Unicode 字符转换为一个字节序列的过程。 而解码是将一个编码字节序列转换为一组 Unicode 字符的过程。 有关 Encoding 所支持的 Unicode 转换格式 (UTF) 和其他编码的信息,请参见.NET Framework 中的字符编码。
请注意,Encoding 用于对 Unicode 字符进行操作,而不是对任意二进制数据(如字节数组)进行操作。 如果您的应用程序必须将任意二进制数据编码为文本,则该应用程序应使用由 Convert.ToBase64CharArray 之类的方法实现的协议(如 uuencode)。
.NET Framework 提供以下 Encoding 类的实现以支持当前 Unicode 编码和其他编码:
ASCIIEncoding 将 Unicode 字符编码为单个 7 位 ASCII 字符。 此编码仅支持 U+0000 和 U+007F 之间的字符值。 代码页 20127。 还可通过 ASCII 属性获得。
UTF7Encoding 使用 UTF-7 编码对 Unicode 字符进行编码。 此编码支持所有 Unicode 字符值。 代码页 65000。 还可通过 UTF7 属性获得。
UTF8Encoding 使用 UTF-8 编码对 Unicode 字符进行编码。 此编码支持所有 Unicode 字符值。 代码页 65001。 还可通过 UTF8 属性获得。
UnicodeEncoding 使用 UTF-16 编码对 Unicode 字符进行编码。 它支持 Little Endian 和 Big Endian 字节顺序。 还可通过 Unicode 属性和 BigEndianUnicode 属性获得。
UTF32Encoding 使用 UTF-32 编码对 Unicode 字符进行编码。 支持 Little-Endian(代码页 12000)和 Big-Endian(代码页 12001)字节顺序。 还可通过 UTF32 属性获得。
Encoding 类主要用于在不同的编码和 Unicode 之间进行转换。 通常,对于您的应用程序来说,某个派生的 Unicode 类是不错的选择。
您的应用程序使用 GetEncoding 方法来获得其他编码。 它们应使用 GetEncodings 方法来获得所有编码的列表。
下表列出了受支持的编码以及与这些编码关联的代码页。 最后一列中的星号指示 .NET Framework 本身即支持该代码页,而不需考虑基础平台。
代码页
Name
显示名称
37
IBM037
IBM EBCDIC(美国 - 加拿大)
437
IBM437
OEM 美国
500
IBM500
IBM EBCDIC(国际)
708
ASMO-708
阿拉伯字符 (ASMO 708)
720
DOS-720
阿拉伯字符 (DOS)
737
ibm737
希腊字符 (DOS)
775
ibm775
波罗的海字符 (DOS)
850
ibm850
西欧字符 (DOS)
852
ibm852
中欧字符 (DOS)
855
IBM855
OEM 西里尔语
857
ibm857
土耳其字符 (DOS)
858
IBM00858
OEM 多语言拉丁语 I
860
IBM860
葡萄牙语 (DOS)
861
ibm861
冰岛语 (DOS)
862
DOS-862
希伯来字符 (DOS)
863
IBM863
加拿大法语 (DOS)
864
IBM864
阿拉伯字符 (864)
865
IBM865
北欧字符 (DOS)
866
cp866
西里尔字符 (DOS)
869
ibm869
现代希腊字符 (DOS)
870
IBM870
IBM EBCDIC(多语言拉丁语 2)
874
windows-874
泰语 (Windows)
875
cp875
IBM EBCDIC(现代希腊语)
932
shift_jis
日语 (Shift-JIS)
936
gb2312
简体中文 (GB2312)
*
949
ks_c_5601-1987
朝鲜语
950
big5
繁体中文 (Big5)
1026
IBM1026
IBM EBCDIC(土耳其拉丁语 5)
1047
IBM01047
IBM 拉丁语 1
1140
IBM01140
IBM EBCDIC(美国 - 加拿大 - 欧洲)
1141
IBM01141
IBM EBCDIC(德国 - 欧洲)
1142
IBM01142
IBM EBCDIC(丹麦 - 挪威 - 欧洲)
1143
IBM01143
IBM EBCDIC(芬兰 - 瑞典 - 欧洲)
1144
IBM01144
IBM EBCDIC(意大利 - 欧洲)
1145
IBM01145
IBM EBCDIC(西班牙 - 欧洲)
1146
IBM01146
IBM EBCDIC(英国 - 欧洲)
1147
IBM01147
IBM EBCDIC(法国 - 欧洲)
1148
IBM01148
IBM EBCDIC(国际 - 欧洲)
1149
IBM01149
IBM EBCDIC(冰岛语 - 欧洲)
1200
utf-16
1201
unicodeFFFE
Unicode (Big-Endian)
1250
windows-1250
中欧字符 (Windows)
1251
windows-1251
西里尔字符 (Windows)
1252
Windows-1252
西欧字符 (Windows)
1253
windows-1253
希腊字符 (Windows)
1254
windows-1254
土耳其字符 (Windows)
1255
windows-1255
希伯来字符 (Windows)
1256
windows-1256
阿拉伯字符 (Windows)
1257
windows-1257
波罗的海字符 (Windows)
1258
windows-1258
越南字符 (Windows)
1361
Johab
朝鲜语 (Johab)
10000
macintosh
西欧字符 (Mac)
10001
x-mac-japanese
日语 (Mac)
10002
x-mac-chinesetrad
繁体中文 (Mac)
10003
x-mac-korean
朝鲜语 (Mac)
10004
x-mac-arabic
阿拉伯字符 (Mac)
10005
x-mac-hebrew
希伯来字符 (Mac)
10006
x-mac-greek
希腊字符 (Mac)
10007
x-mac-cyrillic
西里尔字符 (Mac)
10008
x-mac-chinesesimp
简体中文 (Mac)
10010
x-mac-romanian
罗马尼亚语 (Mac)
10017
x-mac-ukrainian
乌克兰语 (Mac)
10021
x-mac-thai
泰语 (Mac)
10029
x-mac-ce
中欧字符 (Mac)
10079
x-mac-icelandic
冰岛语 (Mac)
10081
x-mac-turkish
土耳其字符 (Mac)
10082
x-mac-croatian
克罗地亚语 (Mac)
12000
utf-32
Unicode (UTF-32)
12001
utf-32BE
Unicode (UTF-32 Big-Endian)
20000
x-Chinese-CNS
繁体中文 (CNS)
20001
x-cp20001
TCA 台湾
20002
x-Chinese-Eten
繁体中文 (Eten)
20003
x-cp20003
IBM5550 台湾
20004
x-cp20004
TeleText 台湾
20005
x-cp20005
Wang 台湾
20105
x-IA5
西欧字符 (IA5)
20106
x-IA5-German
德语 (IA5)
20107
x-IA5-Swedish
瑞典语 (IA5)
20108
x-IA5-Norwegian
挪威语 (IA5)
20127
us-ascii
US-ASCII
20261
x-cp20261
T.61
20269
x-cp20269
ISO-6937
20273
IBM273
IBM EBCDIC(德国)
20277
IBM277
IBM EBCDIC(丹麦 - 挪威)
20278
IBM278
IBM EBCDIC(芬兰 - 瑞典)
20280
IBM280
IBM EBCDIC(意大利)
20284
IBM284
IBM EBCDIC(西班牙)
20285
IBM285
IBM EBCDIC(英国)
20290
IBM290
IBM EBCDIC(日语片假名)
20297
IBM297
IBM EBCDIC(法国)
20420
IBM420
IBM EBCDIC(阿拉伯语)
20423
IBM423
IBM EBCDIC(希腊语)
20424
IBM424
IBM EBCDIC(希伯来语)
20833
x-EBCDIC-KoreanExtended
IBM EBCDIC(朝鲜语扩展)
20838
IBM-Thai
IBM EBCDIC(泰语)
20866
koi8-r
西里尔字符 (KOI8-R)
20871
IBM871
IBM EBCDIC(冰岛语)
20880
IBM880
IBM EBCDIC(西里尔俄语)
20905
IBM905
IBM EBCDIC(土耳其语)
20924
IBM00924
20932
EUC-JP
日语(JIS 0208-1990 和 0212-1990)
20936
x-cp20936
简体中文 (GB2312-80)
20949
x-cp20949
朝鲜语 Wansung
21025
cp1025
IBM EBCDIC(西里尔塞尔维亚 - 保加利亚语)
21866
koi8-u
西里尔字符 (KOI8-U)
28591
iso-8859-1
西欧字符 (ISO)
28592
iso-8859-2
中欧字符 (ISO)
28593
iso-8859-3
拉丁语 3 (ISO)
28594
iso-8859-4
波罗的海字符 (ISO)
28595
iso-8859-5
西里尔字符 (ISO)
28596
iso-8859-6
阿拉伯字符 (ISO)
28597
iso-8859-7
希腊字符 (ISO)
28598
iso-8859-8
希伯来字符 (ISO-Visual)
28599
iso-8859-9
土耳其字符 (ISO)
28603
iso-8859-13
爱沙尼亚语 (ISO)
28605
iso-8859-15
拉丁语 9 (ISO)
29001
x-Europa
欧罗巴
38598
iso-8859-8-i
希伯来字符 (ISO-Logical)
50220
iso-2022-jp
日语 (JIS)
50221
csISO2022JP
日语(JIS- 允许 1 字节假名)
50222
日语(JIS- 允许 1 字节假名 - SO/SI)
50225
iso-2022-kr
朝鲜语 (ISO)
50227
x-cp50227
简体中文 (ISO-2022)
51932
euc-jp
日语 (EUC)
51936
EUC-CN
简体中文 (EUC)
51949
euc-kr
朝鲜语 (EUC)
52936
hz-gb-2312
简体中文 (HZ)
54936
GB18030
简体中文 (GB18030)
57002
x-iscii-de
ISCII 梵文
57003
x-iscii-be
ISCII 孟加拉语
57004
x-iscii-ta
ISCII 泰米尔语
57005
x-iscii-te
ISCII 泰卢固语
57006
x-iscii-as
ISCII 阿萨姆语
57007
x-iscii-or
ISCII 奥里雅语
57008
x-iscii-ka
ISCII 卡纳达语
57009
x-iscii-ma
ISCII 马拉雅拉姆字符
57010
x-iscii-gu
ISCII 古吉拉特字符
57011
x-iscii-pa
ISCII 旁遮普字符
65000
utf-7
Unicode (UTF-7)
65001
utf-8
Unicode (UTF-8)
如果要转换的数据仅存在于连续块(如从流中读取的数据)中,或者如果数据量很大,需要划分为较小的块,则应用程序应当使用由某个派生类的 GetDecoder 方法提供的 Decoder 或由该派生类的 GetEncoder 方法提供的 Encoder。
UTF-16 和 UTF-32 编码器可以使用 Big-Endian 字节顺序(从最高有效字节开始),也可以使用 Little-Endian 字节顺序(从最低有效字节开始)。 例如,大写拉丁字母 A (U+0041) 的序列化结果(十六进制)如下所示:
UTF-16 Big-Endian 字节顺序:00 41
UTF-16 Little-Endian 字节顺序:41 00
UTF-32 Big-Endian 字节顺序:00 00 00 41
UTF-32 Little-Endian 字节顺序:41 00 00 00
通常,使用本机字节顺序存储 Unicode 字符的效率更高。 例如,在 Little-endian 平台(如 Intel 计算机)上最好使用 Little-endian 字节顺序。
GetPreamble 方法检索一个包括字节顺序标记 (BOM) 的字节数组。 如果将此字节数组作为编码流的前缀,将有助于解码器识别所用的编码格式。
有关字节顺序和字节顺序标记的更多信息,请参见位于 Unicode home page(Unicode 主页)上的“The Unicode Standard”(Unicode 标准)。
请注意,编码类允许错误进行如下更改:
在不提示的情况下更改为“?”字符。
使用“最佳匹配”字符。
通过将 EncoderFallback 和 DecoderFallback 类与 U+FFFD Unicode 替换字符结合使用来更改为特定于应用程序的行为。
建议让您的应用程序针对所有的数据流错误引发异常。 应用程序要么在适用时使用“throwonerror”标志,要么使用 EncoderExceptionFallback 和 DecoderExceptionFallback 类。 通常不建议使用最佳匹配回退,因为它可能会导致数据丢失或发生冲突,而且比简单字符替换慢。 对于 ANSI 编码,最佳匹配行为是默认行为。
下面的示例将字符串从一种编码转换为另一种编码。
注意
byte[] 数组在此示例中是唯一包含编码数据的类型。 .NET Char 和字符串类型是本身 Unicode,因此 GetChars 调用将数据再解码为 Unicode。
龙腾一族至尊龙骑