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#
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Encoding : ICloneable
Encoding 类型公开以下成员。
构造函数
显示: 继承 保护
| 名称 | 说明 |
初始化 Encoding 类的新实例。 | ||
初始化对应于指定代码页的 Encoding 类的新实例。 |
属性
显示: 继承 保护
名称 | 说明 |
ASCII | 获取 ASCII(7 位)字符集的编码。 |
获取使用 Big Endian 字节顺序的 UTF-16 格式的编码。 | |
在派生类中重写时,获取可与邮件代理正文标记一起使用的当前编码的名称。 | |
在派生类中重写时,获取当前 Encoding 的代码页标识符。 | |
获取或设置当前 Encoding 对象的 DecoderFallback 对象。 | |
获取操作系统的当前 ANSI 代码页的编码。 | |
获取或设置当前 Encoding 对象的 EncoderFallback 对象。 | |
在派生类中重写时,获取当前编码的可读说明。 | |
在派生类中重写时,获取可与邮件代理标题标记一起使用的当前编码的名称。 | |
在派生类中重写时,获取一个值,该值指示浏览器客户端是否可以使用当前的编码显示内容。 | |
在派生类中重写时,获取一个值,该值指示浏览器客户端是否可以使用当前的编码保存内容。 | |
在派生类中重写时,获取一个值,该值指示邮件和新闻客户端是否可以使用当前的编码显示内容。 | |
在派生类中重写时,获取一个值,该值指示邮件和新闻客户端是否可以使用当前的编码保存内容。 | |
在派生类中重写时,获取一个值,该值指示当前的编码是否为只读。 | |
在派生类中重写时,获取一个值,该值指示当前的编码是否使用单字节码位。 | |
获取使用 Little-Endian 字节顺序的 UTF-16 格式的编码。 | |
UTF32 | 获取使用 Little-Endian 字节顺序的 UTF-32 格式的编码。 |
UTF7 | 获取 UTF-7 格式的编码。 |
UTF8 | 获取 UTF-8 格式的编码。 |
在派生类中重写时,获取在 Internet 编号分配管理机构 (IANA) 注册的当前编码的名称。 | |
在派生类中重写时,获取与当前编码最紧密对应的 Windows 操作系统代码页。 |
方法
显示: 继承 保护
| 名称 | 说明 |
Clone | 当在派生类中重写时,创建当前 Encoding 对象的一个浅表副本。 | |
将整个字节数组从一种编码转换为另一种编码。 | ||
将字节数组内某个范围的字节从一种编码转换为另一种编码。 | ||
Equals | 确定指定的 Object 是否等于当前实例。 (重写 Object.Equals(Object)。) | |
允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) | ||
在派生类中重写时,计算对指定字符数组中的所有字符进行编码所产生的字节数。 | ||
在派生类中重写时,计算对指定字符串中的字符进行编码所产生的字节数。 | ||
在派生类中重写时,计算对一组字符(从指定的字符指针处开始)进行编码所产生的字节数。 | ||
在派生类中重写时,计算对指定字符数组中的一组字符进行编码所产生的字节数。 | ||
在派生类中重写时,将指定字符数组中的所有字符编码为一个字节序列。 | ||
在派生类中重写时,将指定字符串中的所有字符编码为一个字节序列。 | ||
在派生类中重写时,将指定字符数组中的一组字符编码为一个字节序列。 | ||
在派生类中重写时,将一组字符(从指定的字符指针开始)编码为一个字节序列,并从指定的字节指针开始存储该字节序列。 | ||
在派生类中重写时,将指定字符数组中的一组字符编码为指定的字节数组。 | ||
在派生类中重写时,将指定字符串中的一组字符编码为指定的字节数组。 | ||
在派生类中重写时,计算对指定字节数组中的所有字节进行解码所产生的字符数。 | ||
在派生类中重写时,计算对字节序列(从指定的字节指针开始)进行解码所产生的字符数。 | ||
在派生类中重写时,计算对字节序列(从指定字节数组开始)进行解码所产生的字符数。 | ||
在派生类中重写时,将指定字节数组中的所有字节解码为一组字符。 | ||
在派生类中重写时,将指定字节数组中的一个字节序列解码为一组字符。 | ||
在派生类中重写时,将一个字节序列(从指定的字节指针开始)解码为一组字符,并从指定的字符指针开始存储该组字符。 | ||
在派生类中重写时,将指定字节数组中的字节序列解码为指定的字符数组。 | ||
在派生类中重写时,获取一个解码器,该解码器将已编码的字节序列转换为字符序列。 | ||
在派生类中重写时,获取一个解码器,该解码器将 Unicode 字符序列转换为已编码的字节序列。 | ||
返回与指定代码页标识符关联的编码。 | ||
返回与指定代码页名称关联的编码。 | ||
返回与指定代码页标识符关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。 | ||
返回与指定代码页名称关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。 | ||
返回包含所有编码的数组。 | ||
返回当前实例的哈希代码。 (重写 Object.GetHashCode()。) | ||
在派生类中重写时,计算对指定数目的字符进行编码所产生的最大字节数。 | ||
在派生类中重写时,计算对指定数目的字节进行解码时所产生的最大字符数。 | ||
在派生类中重写时,返回指定所用编码的字节序列。 | ||
在派生类中重写时,将指定字节数组中的所有字节解码为一个字符串。 | ||
在派生类中重写时,将指定字节数组中的一个字节序列解码为一个字符串。 | ||
使用默认范式获取一个值,该值指示当前编码是否始终被规范化。 | ||
在派生类中重写时,使用指定范式获取一个值,该值指示当前编码是否始终被规范化。 | ||
返回表示当前对象的字符串。 (继承自 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 | 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。 |
C#
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 (?)
龙腾一族至尊龙骑