Encoding 类
表示字符编码。
命名空间: System.Text
程序集: mscorlib(在 mscorlib.dll 中)
语法
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Encoding : ICloneable
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。) |
备注
请注意,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 |
Unicode |
* |
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 |
IBM 拉丁语 1 |
|
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 |
iso-2022-jp |
日语(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。 |
using System;
using System.Text; class Example
{
static void Main()
{
string unicodeString = "This string contains the unicode character Pi (\u03a0)"; // Create two different encodings.
Encoding ascii = Encoding.ASCII;
Encoding unicode = Encoding.Unicode; // Convert the string into a byte array.
byte[] unicodeBytes = unicode.GetBytes(unicodeString); // Perform the conversion from one encoding to the other.
byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes); // Convert the new byte[] into a char[] and then into a string.
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
string asciiString = new string(asciiChars); // Display the strings created before and after the conversion.
Console.WriteLine("Original string: {0}", unicodeString);
Console.WriteLine("Ascii converted string: {0}", asciiString);
}
}
// The example displays the following output:
// Original string: This string contains the unicode character Pi (Π)
// Ascii converted string: This string contains the unicode character Pi (?)