次の方法で共有


System.Text.Encoding クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

Encoding クラスは文字エンコーディングを表します。

エンコーディングは、Unicode 文字のセットをバイト シーケンスに変換するプロセスです。 一方、デコードとは、エンコードされたバイトのシーケンスを一連の Unicode 文字に変換するプロセスです。 Unicode 変換形式 (UDF) とその他のエンコードのサポートEncodingについては、「.NET での文字エンコード」を参照してください

Encoding は、バイト配列などの任意のバイナリ データの代わりに Unicode 文字を操作することを目的としています。 任意のバイナリ データをテキストにエンコードする必要がある場合は、uuencode などのプロトコルを使用する必要があります。これは、次のような Convert.ToBase64CharArrayメソッドによって実装されます。

.NET には、現在の Unicode エンコードやその他のエンコードを Encoding サポートするために、クラスの次の実装が用意されています。

  • 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 文字をエンコードします。 リトル エンディアンとビッグ エンディアンの両方のバイトオーダーがサポートされています。 また、プロパティとプロパティをUnicodeBigEndianUnicode通じて利用できます。

  • UTF32Encoding は UTF-32 エンコードを使用して Unicode 文字をエンコードします。 リトル エンディアン (コード ページ 12000) とビッグ エンディアン (コード ページ 12001) の両方のバイトオーダーがサポートされています。 プロパティを UTF32 通じて利用することもできます。

この Encoding クラスは、主に異なるエンコーディングと Unicode の間で変換することを目的としています。 多くの場合、派生 Unicode クラスの 1 つが、アプリに適した選択肢です。

メソッドを 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 使用できます。

Note

国際標準に対応するプロパティを持 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 (UK-Euro)
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 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-ヘブライ語 ヘブライ語 (Mac)
10006 x-mac-greek ギリシャ語 (Mac)
10007 x-mac-cyrillic キリル文字 (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-icelandic アイスランド (Mac)
10081 x-mac-turkish トルコ語 (Mac)
10082 x-mac-croatian クロアチア語 (Mac)
12000 utf-32 Unicode (UTF-32)
12001 utf-32BE Unicode (UTF-32 ビッグ エンディアン)
20000 x-chinese-CNS 繁体字中国語 (CNS)
20001 x-cp20001 TCA 台湾
20002 x-Chinese-Eten 繁体字中国語 (Eten)
20003 x-cp20003 台湾IBM5550
20004 x-cp20004 TeleText Taiwan
20005 x-cp20005 王 台湾
20105 x-IA5 西ヨーロッパ (IA5)
20106 x-IA5-German ドイツ語 (IA5)
20107 x-IA5-スウェーデン語 スウェーデン語 (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 韓国語 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-ヨーロッパ 欧州
38598 iso-8859-8-i ヘブライ語 (ISO 論理)
50220 iso-2022-jp 日本語 (JIS)
50221 csISO2022JP 日本語 (JIS-Allow 1 byte かな)
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 ベンガル語
57004 x-iscii-ta ISCII Tamil
57005 x-iscii-te ISCII テルグ語
57006 x-iscii-as ISCII Assamese
57007 x-iscii-or ISCII Oriya
57008 x-iscii-ka ISCII カンナダ
57009 x-iscii-ma ISCII マラヤーラム語
57010 x-iscii-gu ISCII Gujarati
57011 x-iscii-pa ISCII Punjabi
65000 utf-7 Unicode (UTF-7)
65001 utf-8 Unicode (UTF-8)

次の例では、 GetEncoding(Int32) ギリシャ語 (Windows) コード ページエンコードを取得するメソッドと GetEncoding(String) メソッドを呼び出します。 メソッド呼び出しによって返されたオブジェクトが等しいことを示すために比較 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

変換するデータがシーケンシャル ブロックでのみ使用できる場合 (ストリームから読み取られるデータなど)、またはデータの量が非常に大きいために小さなブロックに分割する必要がある場合は、派生クラスのメソッドまたはEncoderGetEncoderメソッドによってGetDecoder提供されるデータをそれぞれ使用Decoderする必要があります。

UTF-16 エンコーダーと UTF-32 エンコーダーは、ビッグ エンディアン バイトオーダー (最上位バイト優先) またはリトル エンディアン バイト順 (最下位バイト優先) を使用できます。 たとえば、ラテン大文字 A (U+0041) は次のようにシリアル化されます (16 進数)。

  • UTF-16 ビッグ エンディアンバイトオーダー: 00 41
  • UTF-16 リトル エンディアン バイト順: 41 00
  • UTF-32 ビッグ エンディアン バイト順: 00 00 00 41
  • UTF-32 リトル エンディアン バイト順: 41 00 00 00

一般に、ネイティブのバイト順を使用して Unicode 文字を格納する方が効率的です。 たとえば、Intel コンピューターなどのリトル エンディアン プラットフォームでは、リトル エンディアン バイト順を使用することをお勧めします。

このメソッドは GetPreamble 、バイト オーダー マーク (BOM) を含むバイト配列を取得します。 このバイト配列にエンコードされたストリームのプレフィックスが付いている場合は、デコーダーが使用するエンコード形式を識別するのに役立ちます。

バイト順とバイト順マークの詳細については、Unicode ホーム ページの Unicode 標準を参照してください。

エンコード クラスでは、次のエラーが発生する可能性があることに注意してください。

  • サイレントモードで "?" 文字に変更します。
  • "best fit" 文字を使用します。
  • U+FFFD Unicode 置換文字と共にクラスをEncoderFallbackDecoderFallback使用して、アプリケーション固有の動作に変更します。

データ ストリーム エラーで例外をスローする必要があります。 アプリは、該当する場合は "throwonerror" フラグを使用するか、およびDecoderExceptionFallbackクラスをEncoderExceptionFallback使用します。 多くの場合、最適フォールバックは、データの損失や混乱を引き起こす可能性があり、単純な文字置換よりも遅いため、推奨されません。 ANSI エンコードの場合、最適な動作が既定値です。