System.Text.Encoding 類別

本文提供此 API 參考文件的補充備註。

Encoding 類別表示字元編碼方式。

編碼是將一組 Unicode 字元轉換成位元組序列的處理程序。 相反地,譯碼是將編碼位元組序列轉換成一組 Unicode 字元的程式。 如需 Unicode 轉換格式 #UTF 和其他支援的 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字元。 支援小端和大端位元組順序。 也可以透過 Unicode 屬性和 BigEndianUnicode 屬性取得。

  • UTF32Encoding 使用UTF-32編碼來編碼 Unicode 字元。 支援小 endian (代碼頁 12000) 和 big endian (代碼頁 12001) 位元組順序。 也可以透過 UTF32 屬性取得。

類別 Encoding 主要用來在不同的編碼和 Unicode 之間轉換。 通常其中一個衍生的 Unicode 類別是應用程式的正確選擇。

GetEncoding使用 方法來取得其他編碼方式,並呼叫 GetEncodings 方法以取得所有編碼的清單。

編碼清單

下表列出 .NET 支援的編碼方式。 它會列出每個編碼的代碼頁碼,以及編碼的 EncodingInfo.NameEncodingInfo.DisplayName 屬性的值。 .NET Framework 支援.NET Core 支援.NET 5 及更新版本支援數據行中的複選標記表示不論基礎平台為何,該 .NET 實作原生支持代碼頁。 針對 .NET Framework,數據表中列出的其他編碼可用性取決於操作系統。 針對 .NET Core 和 .NET 5 和更新版本,可以使用 類別或衍生自 System.Text.EncodingProvider 類別來取得System.Text.CodePagesEncodingProvider其他編碼。

注意

屬性 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 Latin-1
1140 IBM01140 IBM EBCDIC (US-Canada-Euro)
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 韓文(約伯)
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-希伯來文 希伯來文 (Mac)
10006 x-mac-greek 希臘文(Mac)
10007 x-mac-斯拉夫 斯拉夫文 (Mac)
10008 x-mac-chinesesimp 簡體中文(Mac)
10010 x-mac-羅馬尼亞文 羅馬尼亞文(Mac)
10017 x-mac-烏克蘭文 烏克蘭文(Mac)
10021 x-mac-thai 泰文(Mac)
10029 x-mac-ce 中歐 (Mac)
10079 x-mac-冰島文 冰島文(Mac)
10081 x-mac-turkish 土耳其文(Mac)
10082 x-mac-克羅埃西亞文 克羅埃西亞文 (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 王台
20105 x-IA5 西歐 (IA5)
20106 x-IA5-German 德文 (IA5)
20107 x-IA5-Swedish 瑞典文 (IA5)
20108 x-IA5-挪威文 挪威文(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 Latin-1
20932 EUC-JP 日文 (JIS 0208-1990 和 0212-1990)
20936 x-cp20936 簡體中文 (GB2312-80)
20949 x-cp20949 韓文萬松
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-Allow 1 位元節假名)
50222 iso-2022-jp 日文 (JIS-Allow 1 byte Kana - 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 Devanagari
57003 x-iscii-be ISCII Bengali
57004 x-iscii-ta ISCII 泰米爾文
57005 x-iscii-te ISCII Telugu
57006 x-iscii-as ISCII Assamese
57007 x-iscii-or ISCII Oriya
57008 x-iscii-ka ISCII Kannada
57009 x-iscii-ma ISCII 馬來亞蘭文
57010 x-iscii-gu ISCII Gujarati
57011 x-iscii-pa ISCII 旁遮普
65000 utf-7 Unicode (UTF-7)
65001 utf-8 Unicode (UTF-8)

下列範例會呼叫 GetEncoding(Int32)GetEncoding(String) 方法來取得希臘文 (Windows) 代碼頁編碼。 它會比較 Encoding 方法呼叫所傳回的物件,以顯示它們相等,然後對應會顯示希臘文字母表中每個字元的 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

如果要轉換的資料僅適用於循序區塊(例如從資料流讀取的數據),或資料量太大而需要分割成較小的區塊,則您應該分別使用 Decoder 衍生類別的 方法或 EncoderGetEncoder 方法所提供的 GetDecoder

UTF-16 和 UTF-32 編碼器可以使用大位元組位元組順序(最顯著位元組優先)或小位元組位元組順序(最不重要位元組優先)。 例如,拉丁大寫字母 A (U+0041) 會串行化如下(十六進位):

  • UTF-16 大位元組位元組順序:00 41
  • UTF-16 小端位元組順序:41 00
  • UTF-32 big endian byte order: 00 00 00 41
  • UTF-32 小端位元組順序:41 00 00 00

使用原生位元節順序來儲存 Unicode 字元通常更有效率。 例如,最好在小端平臺上使用小位元組位元組順序,例如 Intel 計算機。

方法 GetPreamble 會擷取位元組陣列,其中包含位元組順序標記 (BOM)。 如果這個位元組數位前面加上編碼數據流,它可協助譯碼器識別所使用的編碼格式。

如需位元組順序和位元組順序標記的詳細資訊,請參閱 Unicode 首頁上的 Unicode 標準。

請注意,編碼類別允許錯誤:

  • 以無訊息方式變更為 “?” 字元。
  • 使用「最適合」字元。
  • 透過使用 EncoderFallbackDecoderFallback 類別搭配U+FFFD Unicode 取代字元,變更為應用程式特定行為。

您應該在任何數據流錯誤上擲回例外狀況。 當適用或使用和 DecoderExceptionFallback 類別時,應用程式會使用EncoderExceptionFallback“throwonerror” 旗標。 通常不建議使用最佳配適後援,因為它可能會導致數據遺失或混淆,而且比簡單的字元取代速度慢。 針對 ANSI 編碼,最適合的行為是預設值。