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 エンコードの場合、最適な動作が既定値です。
.NET