Encoding 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示字符编码。
public ref class Encoding abstract
public ref class Encoding abstract : ICloneable
public abstract class Encoding
public abstract class Encoding : ICloneable
[System.Serializable]
public abstract class Encoding
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class Encoding : ICloneable
type Encoding = class
type Encoding = class
interface ICloneable
[<System.Serializable>]
type Encoding = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type Encoding = class
interface ICloneable
Public MustInherit Class Encoding
Public MustInherit Class Encoding
Implements ICloneable
- 继承
-
Encoding
- 派生
- 属性
- 实现
示例
下面的示例将字符串从一种编码转换为另一种编码。
注意
byte[]
在此示例中,数组是包含编码数据的唯一类型。 .NET Char
和 String
类型本身就是 unicode,因此调用会将 GetChars 数据解码回 unicode。
using namespace System;
using namespace System::Text;
int 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.
array<Byte>^unicodeBytes = unicode->GetBytes( unicodeString );
// Perform the conversion from one encoding to the other.
array<Byte>^asciiBytes = Encoding::Convert( unicode, ascii, unicodeBytes );
// Convert the new Byte into[] a char and[] then into a string.
array<Char>^asciiChars = gcnew array<Char>(ascii->GetCharCount( asciiBytes, 0, asciiBytes->Length ));
ascii->GetChars( asciiBytes, 0, asciiBytes->Length, asciiChars, 0 );
String^ asciiString = gcnew 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 (?)
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 (?)
Imports System.Text
Class Example
Shared Sub Main()
Dim unicodeString As String = "This string contains the unicode character Pi (" & ChrW(&H03A0) & ")"
' Create two different encodings.
Dim ascii As Encoding = Encoding.ASCII
Dim unicode As Encoding = Encoding.Unicode
' Convert the string into a byte array.
Dim unicodeBytes As Byte() = unicode.GetBytes(unicodeString)
' Perform the conversion from one encoding to the other.
Dim asciiBytes As Byte() = Encoding.Convert(unicode, ascii, unicodeBytes)
' Convert the new byte array into a char array and then into a string.
Dim asciiChars(ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)-1) As Char
ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0)
Dim asciiString As 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)
End Sub
End Class
' 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 (?)
注解
编码是将一组 Unicode 字符转换为一个字节序列的过程。 相反,解码是将编码字节序列转换为一组 Unicode 字符的过程。 有关 Unicode 转换格式(UTFs)和支持的其他编码的信息 Encoding ,请参阅.net 中的字符编码。
请注意, Encoding 旨在对 Unicode 字符而不是任意二进制数据(如字节数组)进行操作。 如果必须将任意二进制数据编码为文本,则应使用诸如 uuencode 这样的协议,该协议是由等方法实现的 Convert.ToBase64CharArray 。
.NET 提供类的以下实现 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 和大型 endian 字节顺序。 还可通过 Unicode 属性和属性获取 BigEndianUnicode 。
UTF32Encoding使用 32 UTF-8 编码对 Unicode 字符进行编码。 支持 little endian (代码页12000)和大型 endian (代码页12001)字节顺序。 还可通过 UTF32 属性获得。
Encoding类主要用于在不同的编码和 Unicode 之间转换。 通常,其中一个派生的 Unicode 类是适用于你的应用程序的正确选择。
使用 GetEncoding 方法可获取其他编码,并调用 GetEncodings 方法来获取所有编码的列表。
编码列表
下表列出了 .NET 支持的编码。 它列出了每个编码的代码页编号以及编码的 EncodingInfo.Name 和属性的值 EncodingInfo.DisplayName 。 .NET Framework支持、.NET Core 支持或 .NET 5 及更高版本支持列中的检查标记指示该 .NET 实现本机支持代码页,而不考虑基础平台。 对于 .NET Framework,表中列出的其他编码的可用性取决于操作系统。 对于 .NET Core 和 .NET 5 及更高版本,可以使用 System.Text.CodePagesEncodingProvider 类或派生自 System.Text.EncodingProvider 类的其他编码。
注意
EncodingInfo.Name属性对应于国际标准的代码页不一定完全符合该标准。
代码页 | “属性” | 显示名称 | .NET Framework 支持 | .NET Core 支持 | .NET 5 及更高版本支持 | |
---|---|---|---|---|---|---|
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 (大字节序) | ✓ | ✓ | ✓ | |
1250 | windows-1250 | 中欧语(Windows) | ||||
1251 | windows-1251 | 西里尔语(Windows) | ||||
1252 | GB2312 | 西欧(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-日语 | 日语(Mac) | ||||
10002 | x-mac-chinesetrad | 繁体中文(Mac) | ||||
10003 | x-mac-韩语 | 朝鲜语(Mac) | ✓ | |||
10004 | x-mac-阿拉伯语 | 阿拉伯语(Mac) | ||||
10005 | x-mac-希伯来语 | 希伯来语(Mac) | ||||
10006 | x-mac-希腊语 | 希腊语(Mac) | ||||
10007 | x-mac-西里尔文 | 西里尔语(Mac) | ||||
10008 | x-mac-chinesesimp | 简体中文(Mac) | ✓ | |||
10010 | x-mac | 罗马尼亚语(Mac) | ||||
10017 | x-mac-乌克兰语 | 乌克兰语(Mac) | ||||
10021 | x-mac-泰语 | 泰语(Mac) | ||||
10029 | x-mac-ce | 中欧语(Mac) | ||||
10079 | x-mac-冰岛语 | 冰岛语(Mac) | ||||
10081 | x-mac-土耳其语 | 土耳其语(Mac) | ||||
10082 | x-mac-克罗地亚语 | 克罗地亚语(Mac) | ||||
12000 | utf-32 | Unicode (UTF-32) | ✓ | ✓ | ✓ | |
12001 | 32BE | Unicode (UTF-16 32 大字节序) | ✓ | ✓ | ✓ | |
20000 | x-中文-CNS | 繁体中文(CNS) | ||||
20001 | x-cp20001 | TCA 台湾 | ||||
20002 | x-中文-Eten | 繁体中文(Eten) | ||||
20003 | x-cp20003 | IBM5550 台湾 | ||||
20004 | x-cp20004 | TeleText 台湾 | ||||
20005 | x-cp20005 | Wang 台湾 | ||||
20105 | x-IA5 | 西欧(IA5) | ||||
20106 | x-IA5-德语 | 德语(IA5) | ||||
20107 | x IA5-瑞典语 | 瑞典语(IA5) | ||||
20108 | x IA5-挪威语 | 挪威语(IA5) | ||||
20127 | us-ascii | US-ASCII | ✓ | ✓ | ✓ | |
20261 | x-cp20261 | 不是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-泰语 | IBM EBCDIC (泰语) | ||||
20866 | koi8-ru-r | 西里尔语(KOI8-RU-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-ru-u | 西里尔语(KOI8-RU) | ||||
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-欧洲 | 欧洲 | ||||
38598 | iso-8859-8-i | 希伯来语(ISO-逻辑) | ✓ | |||
50220 | iso-2022-日本 | 日语(JIS) | ✓ | |||
50221 | csISO2022JP | 日语(JIS-允许1字节假名) | ✓ | |||
50222 | iso-2022-日本 | 日语(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 | ISCII 孟加拉语 | ✓ | |||
57004 | x-iscii-ta | ISCII 泰米尔语 | ✓ | |||
57005 | x-iscii-te | ISCII 泰卢固语 | ✓ | |||
57006 | x-iscii-as | ISCII 阿萨姆语 | ✓ | |||
57007 | x-iscii-或 | 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) | ✓ | ✓ | ✓ |
下面的示例调用 GetEncoding(Int32) 和 GetEncoding(String) 方法以获取希腊语(Windows)代码页编码。 它将 Encoding 方法调用返回的对象进行比较,以显示它们相等,然后 maps 显示每个字符在希腊语字母表中的 Unicode 码位和相应的代码页值。
using System;
using System.Text;
public class Example
{
public static void Main()
{
Encoding enc = Encoding.GetEncoding(1253);
Encoding altEnc = Encoding.GetEncoding("windows-1253");
Console.WriteLine("{0} = Code Page {1}: {2}", enc.EncodingName,
altEnc.CodePage, enc.Equals(altEnc));
string greekAlphabet = "Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η " +
"Θ θ Ι ι Κ κ Λ λ Μ μ Ν ν Ξ ξ " +
"Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ " +
"Φ φ Χ χ Ψ ψ Ω ω";
Console.OutputEncoding = Encoding.UTF8;
byte[] bytes = enc.GetBytes(greekAlphabet);
Console.WriteLine("{0,-12} {1,20} {2,20:X2}", "Character",
"Unicode Code Point", "Code Page 1253");
for (int ctr = 0; ctr < bytes.Length; ctr++) {
if (greekAlphabet[ctr].Equals(' '))
continue;
Console.WriteLine("{0,-12} {1,20} {2,20:X2}", greekAlphabet[ctr],
GetCodePoint(greekAlphabet[ctr]), bytes[ctr]);
}
}
private static string GetCodePoint(char ch)
{
string retVal = "u+";
byte[] bytes = Encoding.Unicode.GetBytes(ch.ToString());
for (int ctr = bytes.Length - 1; ctr >= 0; ctr--)
retVal += bytes[ctr].ToString("X2");
return retVal;
}
}
// The example displays the following output:
// Character Unicode Code Point Code Page 1253
// Α u+0391 C1
// α u+03B1 E1
// Β u+0392 C2
// β u+03B2 E2
// Γ u+0393 C3
// γ u+03B3 E3
// Δ u+0394 C4
// δ u+03B4 E4
// Ε u+0395 C5
// ε u+03B5 E5
// Ζ u+0396 C6
// ζ u+03B6 E6
// Η u+0397 C7
// η u+03B7 E7
// Θ u+0398 C8
// θ u+03B8 E8
// Ι u+0399 C9
// ι u+03B9 E9
// Κ u+039A CA
// κ u+03BA EA
// Λ u+039B CB
// λ u+03BB EB
// Μ u+039C CC
// μ u+03BC EC
// Ν u+039D CD
// ν u+03BD ED
// Ξ u+039E CE
// ξ u+03BE EE
// Ο u+039F CF
// ο u+03BF EF
// Π u+03A0 D0
// π u+03C0 F0
// Ρ u+03A1 D1
// ρ u+03C1 F1
// Σ u+03A3 D3
// σ u+03C3 F3
// ς u+03C2 F2
// Τ u+03A4 D4
// τ u+03C4 F4
// Υ u+03A5 D5
// υ u+03C5 F5
// Φ u+03A6 D6
// φ u+03C6 F6
// Χ u+03A7 D7
// χ u+03C7 F7
// Ψ u+03A8 D8
// ψ u+03C8 F8
// Ω u+03A9 D9
// ω u+03C9 F9
Imports System.Text
Module Example
Public Sub Main()
Dim enc As Encoding = Encoding.GetEncoding(1253)
Dim altEnc As Encoding = Encoding.GetEncoding("windows-1253")
Console.WriteLine("{0} = Code Page {1}: {2}", enc.EncodingName,
altEnc.CodePage, enc.Equals(altEnc))
Dim greekAlphabet As String = "Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η " +
"Θ θ Ι ι Κ κ Λ λ Μ μ Ν ν Ξ ξ " +
"Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ " +
"Φ φ Χ χ Ψ ψ Ω ω"
Console.OutputEncoding = Encoding.UTF8
Dim bytes() As Byte = enc.GetBytes(greekAlphabet)
Console.WriteLine("{0,-12} {1,20} {2,20:X2}", "Character",
"Unicode Code Point", "Code Page 1253")
For ctr As Integer = 0 To bytes.Length - 1
If greekAlphabet(ctr).Equals(" "c) Then Continue For
Console.WriteLine("{0,-12} {1,20} {2,20:X2}", greekAlphabet(ctr),
GetCodePoint(greekAlphabet(ctr)), bytes(ctr))
Next
End Sub
Private Function GetCodePoint(ch As String) As String
Dim retVal As String = "u+"
Dim bytes() As Byte = Encoding.Unicode.GetBytes(ch)
For ctr As Integer = bytes.Length - 1 To 0 Step -1
retVal += bytes(ctr).ToString("X2")
Next
Return retVal
End Function
End Module
' The example displays the following output:
' Character Unicode Code Point Code Page 1253
' Α u+0391 C1
' α u+03B1 E1
' Β u+0392 C2
' β u+03B2 E2
' Γ u+0393 C3
' γ u+03B3 E3
' Δ u+0394 C4
' δ u+03B4 E4
' Ε u+0395 C5
' ε u+03B5 E5
' Ζ u+0396 C6
' ζ u+03B6 E6
' Η u+0397 C7
' η u+03B7 E7
' Θ u+0398 C8
' θ u+03B8 E8
' Ι u+0399 C9
' ι u+03B9 E9
' Κ u+039A CA
' κ u+03BA EA
' Λ u+039B CB
' λ u+03BB EB
' Μ u+039C CC
' μ u+03BC EC
' Ν u+039D CD
' ν u+03BD ED
' Ξ u+039E CE
' ξ u+03BE EE
' Ο u+039F CF
' ο u+03BF EF
' Π u+03A0 D0
' π u+03C0 F0
' Ρ u+03A1 D1
' ρ u+03C1 F1
' Σ u+03A3 D3
' σ u+03C3 F3
' ς u+03C2 F2
' Τ u+03A4 D4
' τ u+03C4 F4
' Υ u+03A5 D5
' υ u+03C5 F5
' Φ u+03A6 D6
' φ u+03C6 F6
' Χ u+03A7 D7
' χ u+03C7 F7
' Ψ u+03A8 D8
' ψ u+03C8 F8
' Ω u+03A9 D9
' ω u+03C9 F9
如果要转换的数据仅在顺序块(如从流中读取的数据)中可用,或者如果数据量很大以致需要分为更小块,则应使用 DecoderEncoderGetDecoder 派生类的方法或方法提供的或 GetEncoder 。
UTF-16 和32编码器可以使用大 endian 字节顺序(首先是最重要的字节),也可以是 little endian 字节顺序(首先是最不重要的字节)。 例如,拉丁文大写字母 A (U + 0041)按以下方式序列化(十六进制):
UTF-16 大 endian 字节顺序: 00 41
UTF-16 little endian 字节顺序: 41 00
32大 endian 字节顺序: 00 00 00 41
32 little endian 字节顺序: 41 00 00 00
使用本机字节顺序存储 Unicode 字符通常更有效。 例如,最好使用 little endian 平台(如 Intel 计算机)上的 little endian 字节顺序。
GetPreamble方法检索包含字节顺序标记(BOM)的字节数组。 如果此字节数组的前缀为编码的流,则它有助于解码器识别所使用的编码格式。
有关字节顺序和字节顺序标记的详细信息,请参阅unicode 主页上的 unicode 标准。
请注意,编码类允许错误:
以无提示方式更改为 "?" 字符。
使用 "最佳匹配" 字符。
通过将 EncoderFallback 和 DecoderFallback 类与 U + FFFD Unicode 替换字符一起使用,更改为应用程序特定的行为。
应在出现任何数据流错误时引发异常。 应用在适用或使用和类时,使用 "throwonerror" 标志 EncoderExceptionFallbackDecoderExceptionFallback 。 通常不建议使用最佳回退,因为这可能会导致数据丢失或混乱,并比简单字符替换慢。 对于 ANSI 编码,最佳行为是默认值。
构造函数
Encoding() |
初始化 Encoding 类的新实例。 |
Encoding(Int32) |
初始化对应于指定代码页的 Encoding 类的新实例。 |
Encoding(Int32, EncoderFallback, DecoderFallback) |
使用指定编码器和解码器回退策略初始化对应于指定代码页的 Encoding 类的新实例。 |
属性
ASCII |
获取 ASCII(7 位)字符集的编码。 |
BigEndianUnicode |
获取使用 Big Endian 字节顺序的 UTF-16 格式的编码。 |
BodyName |
在派生类中重写时,获取可与邮件代理正文标记一起使用的当前编码的名称。 |
CodePage |
在派生类中重写时,获取当前 Encoding 的代码页标识符。 |
DecoderFallback |
获取或设置当前 DecoderFallback 对象的 Encoding 对象。 |
Default |
获取此 .NET 实现的默认编码。 |
EncoderFallback |
获取或设置当前 EncoderFallback 对象的 Encoding 对象。 |
EncodingName |
在派生类中重写时,获取当前编码的用户可读说明。 |
HeaderName |
在派生类中重写时,获取可与邮件代理头标记一起使用的当前编码的名称。 |
IsBrowserDisplay |
在派生类中重写时,获取一个值,该值指示浏览器客户端是否可以使用当前的编码显示内容。 |
IsBrowserSave |
在派生类中重写时,获取一个值,该值指示浏览器客户端是否可以使用当前的编码保存内容。 |
IsMailNewsDisplay |
在派生类中重写时,获取一个值,该值指示邮件和新闻客户端是否可以使用当前的编码显示内容。 |
IsMailNewsSave |
在派生类中重写时,获取一个值,该值指示邮件和新闻客户端是否可以使用当前的编码保存内容。 |
IsReadOnly |
在派生类中重写时,获取一个值,该值指示当前的编码是否为只读。 |
IsSingleByte |
在派生类中重写时,获取一个值,该值指示当前的编码是否使用单字节码位。 |
Latin1 |
获取 Latin1 字符集 (ISO-8859-1) 的编码。 |
Preamble |
在派生类中重写时,返回包含指定所用编码的字节序列的范围。 |
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) |
将字节数组内某个范围的字节从一种编码转换为另一种编码。 |
CreateTranscodingStream(Stream, Encoding, Encoding, Boolean) |
创建一个 Stream,用于在内部 Encoding 和外部 Encoding 之间进行数据转码,类似于 Convert(Encoding, Encoding, Byte[])。 |
Equals(Object) |
确定指定的 Object 是否等同于当前实例。 |
GetByteCount(Char*, Int32) |
在派生类中重写时,计算对一组字符(从指定的字符指针处开始)进行编码所产生的字节数。 |
GetByteCount(Char[]) |
在派生类中重写时,计算对指定字符数组中的所有字符进行编码所产生的字节数。 |
GetByteCount(Char[], Int32, Int32) |
在派生类中重写时,计算对指定字符数组中的一组字符进行编码所产生的字节数。 |
GetByteCount(ReadOnlySpan<Char>) |
在派生类中重写时,计算对指定字符范围的字符进行编码所产生的字节数。 |
GetByteCount(String) |
在派生类中重写时,计算对指定字符串中的字符进行编码所产生的字节数。 |
GetByteCount(String, Int32, Int32) |
在派生类中重写时,计算对指定字符串中的一组字符进行编码所产生的字节数。 |
GetBytes(Char*, Int32, Byte*, Int32) |
在派生类中重写时,将一组字符(从指定的字符指针开始)编码为一个字节序列,并从指定的字节指针开始存储该字节序列。 |
GetBytes(Char[]) |
在派生类中重写时,将指定字符数组中的所有字符编码为一个字节序列。 |
GetBytes(Char[], Int32, Int32) |
在派生类中重写时,将指定字符数组中的一组字符编码为一个字节序列。 |
GetBytes(Char[], Int32, Int32, Byte[], Int32) |
在派生类中重写时,将指定字符数组中的一组字符编码为指定的字节数组。 |
GetBytes(ReadOnlySpan<Char>, Span<Byte>) |
在派生类中重写时,将指定只读范围中的一组字符编码为字节范围。 |
GetBytes(String) |
在派生类中重写时,将指定字符串中的所有字符编码为一个字节序列。 |
GetBytes(String, Int32, Int32) |
在派生类中重写时,从指定的 |
GetBytes(String, Int32, Int32, Byte[], Int32) |
在派生类中重写时,将指定字符串中的一组字符编码为指定的字节数组。 |
GetCharCount(Byte*, Int32) |
在派生类中重写时,计算对字节序列(从指定的字节指针开始)进行解码所产生的字符数。 |
GetCharCount(Byte[]) |
在派生类中重写时,计算对指定字节数组中的所有字节进行解码所产生的字符数。 |
GetCharCount(Byte[], Int32, Int32) |
在派生类中重写时,计算对字节序列(从指定字节数组开始)进行解码所产生的字符数。 |
GetCharCount(ReadOnlySpan<Byte>) |
在派生类中重写时,计算对提供的只读字节范围进行解码所产生的字符数。 |
GetChars(Byte*, Int32, Char*, Int32) |
在派生类中重写时,将一个字节序列(从指定的字节指针开始)解码为一组字符,并从指定的字符指针开始存储该组字符。 |
GetChars(Byte[]) |
在派生类中重写时,将指定字节数组中的所有字节解码为一组字符。 |
GetChars(Byte[], Int32, Int32) |
在派生类中重写时,将指定字节数组中的一个字节序列解码为一组字符。 |
GetChars(Byte[], Int32, Int32, Char[], Int32) |
在派生类中重写时,将指定字节数组中的字节序列解码为指定的字符数组。 |
GetChars(ReadOnlySpan<Byte>, Span<Char>) |
在派生类中重写时,将指定只读字节范围中的所有字节解码为字符范围。 |
GetDecoder() |
在派生类中重写时,获取一个解码器,该解码器将已编码的字节序列转换为字符序列。 |
GetEncoder() |
在派生类中重写时,获取一个解码器,该解码器将 Unicode 字符序列转换为已编码的字节序列。 |
GetEncoding(Int32) |
返回与指定代码页标识符关联的编码。 |
GetEncoding(Int32, EncoderFallback, DecoderFallback) |
返回与指定代码页标识符关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。 |
GetEncoding(String) |
返回与指定代码页名称关联的编码。 |
GetEncoding(String, EncoderFallback, DecoderFallback) |
返回与指定代码页名称关联的编码。 参数指定一个错误处理程序,用于处理无法编码的字符和无法解码的字节序列。 |
GetEncodings() |
返回包含所有编码的数组。 |
GetHashCode() |
返回当前实例的哈希代码。 |
GetMaxByteCount(Int32) |
在派生类中重写时,计算对指定数目的字符进行编码所产生的最大字节数。 |
GetMaxCharCount(Int32) |
在派生类中重写时,计算对指定数目的字节进行解码时所产生的最大字符数。 |
GetPreamble() |
在派生类中重写时,返回指定所用编码的字节序列。 |
GetString(Byte*, Int32) |
在派生类中重写时,将在指定地址开始的指定字节数解码为字符串。 |
GetString(Byte[]) |
在派生类中重写时,将指定字节数组中的所有字节解码为一个字符串。 |
GetString(Byte[], Int32, Int32) |
在派生类中重写时,将指定字节数组中的一个字节序列解码为一个字符串。 |
GetString(ReadOnlySpan<Byte>) |
在派生类中重写时,将指定字节范围中的所有字节解码为一个字符串。 |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
IsAlwaysNormalized() |
使用默认范式获取一个值,该值指示当前编码是否始终被规范化。 |
IsAlwaysNormalized(NormalizationForm) |
在派生类中重写时,使用指定范式获取一个值,该值指示当前编码是否始终被规范化。 |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
RegisterProvider(EncodingProvider) |
注册编码提供程序。 |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |
TryGetBytes(ReadOnlySpan<Char>, Span<Byte>, Int32) |
如果目标足够大,则从指定的只读范围将一组字符编码为字节范围。 |
TryGetChars(ReadOnlySpan<Byte>, Span<Char>, Int32) |
如果目标足够大,则从指定的只读范围解码为字符范围中的一组字节。 |
扩展方法
GetBytes(Encoding, ReadOnlySequence<Char>) |
使用指定的 Encoding 将指定的 ReadOnlySequence<T> 编码到 Byte 数组中。 |
GetBytes(Encoding, ReadOnlySequence<Char>, IBufferWriter<Byte>) |
使用指定的 Encoding 将指定的 ReadOnlySequence<T> 解码为 |
GetBytes(Encoding, ReadOnlySequence<Char>, Span<Byte>) |
使用指定的 Encoding 将指定的 ReadOnlySequence<T> 编码为 |
GetBytes(Encoding, ReadOnlySpan<Char>, IBufferWriter<Byte>) |
使用指定的 Encoding 将指定的 ReadOnlySpan<T> 编码为 |
GetChars(Encoding, ReadOnlySequence<Byte>, IBufferWriter<Char>) |
使用指定的 Encoding 将指定的 ReadOnlySequence<T> 解码为 |
GetChars(Encoding, ReadOnlySequence<Byte>, Span<Char>) |
使用指定的 Encoding 将指定的 ReadOnlySequence<T> 解码为 |
GetChars(Encoding, ReadOnlySpan<Byte>, IBufferWriter<Char>) |
使用指定的 Encoding 将指定的 ReadOnlySpan<T> 解码为 |
GetString(Encoding, ReadOnlySequence<Byte>) |
使用指定的 Encoding 将指定的 ReadOnlySequence<T> 解码到 String。 |