Kelas System.Text.Encoding
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
Kelas Encoding mewakili pengodean karakter.
Pengodean adalah proses mengubah sekumpulan karakter Unicode menjadi urutan byte. Sebaliknya, decoding adalah proses mengubah urutan byte yang dikodekan menjadi satu set karakter Unicode. Untuk informasi tentang Format Transformasi Unicode (UTF) dan pengodean lain yang didukung oleh Encoding, lihat Pengodean Karakter di .NET.
Encoding dimaksudkan untuk beroperasi pada karakter Unicode alih-alih data biner arbitrer, seperti array byte. Jika Anda harus mengodekan data biner arbitrer ke dalam teks, Anda harus menggunakan protokol seperti uuencode, yang diimplementasikan oleh metode seperti Convert.ToBase64CharArray.
.NET menyediakan implementasi Encoding kelas berikut untuk mendukung pengodean Unicode saat ini dan pengodean lainnya:
ASCIIEncoding mengodekan karakter Unicode sebagai karakter ASCII 7-bit tunggal. Pengodean ini hanya mendukung nilai karakter antara U+0000 dan U+007F. Halaman kode 20127. Juga tersedia melalui ASCII properti.
UTF7Encoding mengodekan karakter Unicode menggunakan pengodean UTF-7. Pengodean ini mendukung semua nilai karakter Unicode. Halaman kode 65000. Juga tersedia melalui UTF7 properti.
UTF8Encoding mengodekan karakter Unicode menggunakan pengodean UTF-8. Pengodean ini mendukung semua nilai karakter Unicode. Halaman kode 65001. Juga tersedia melalui UTF8 properti.
UnicodeEncoding mengodekan karakter Unicode menggunakan pengodean UTF-16. Pesanan byte little endian dan big endian didukung. Juga tersedia melalui Unicode properti dan BigEndianUnicode properti.
UTF32Encoding mengodekan karakter Unicode menggunakan pengodean UTF-32. Pesanan byte little endian (halaman kode 12000) dan big endian (halaman kode 12001) didukung. Juga tersedia melalui UTF32 properti.
Kelas Encoding ini terutama dimaksudkan untuk mengonversi antara pengodean yang berbeda dan Unicode. Seringkali salah satu kelas Unicode turunan adalah pilihan yang benar untuk aplikasi Anda.
GetEncoding Gunakan metode untuk mendapatkan pengodean lain, dan panggil GetEncodings metode untuk mendapatkan daftar semua pengodean.
Daftar pengodean
Tabel berikut mencantumkan pengodean yang didukung oleh .NET. Ini mencantumkan setiap nomor halaman kode pengodean dan nilai pengodean EncodingInfo.Name dan EncodingInfo.DisplayName properti. Tanda centang di dukungan .NET Framework, dukungan .NET Core, atau kolom dukungan .NET 5 dan yang lebih baru menunjukkan bahwa halaman kode secara asli didukung oleh implementasi .NET tersebut, terlepas dari platform yang mendasar. Untuk .NET Framework, ketersediaan pengodean lain yang tercantum dalam tabel tergantung pada sistem operasi. Untuk .NET Core dan .NET 5 dan versi yang lebih baru, pengodean lainnya tersedia dengan menggunakan System.Text.CodePagesEncodingProvider kelas atau dengan turunan dari System.Text.EncodingProvider kelas .
Catatan
Halaman kode yang propertinya EncodingInfo.Name sesuai dengan standar internasional tidak selalu mematuhi standar tersebut secara penuh.
Halaman kode | Nama | Nama tampilan | Dukungan .NET Framework | Dukungan .NET Core | Dukungan .NET 5 dan yang lebih baru |
---|---|---|---|---|---|
37 | IBM037 | IBM EBCDIC (AS-Kanada) | |||
437 | IBM437 | Amerika Serikat OEM | |||
500 | IBM500 | IBM EBCDIC (Internasional) | |||
708 | ASMO-708 | Arab (ASMO 708) | |||
720 | DOS-720 | Arab (DOS) | |||
737 | ibm737 | Yunani (DOS) | |||
775 | ibm775 | Baltik (DOS) | |||
850 | ibm850 | Eropa Barat (DOS) | |||
852 | ibm852 | Eropa Tengah (DOS) | |||
855 | IBM855 | Sirilik OEM | |||
857 | ibm857 | Turki (DOS) | |||
858 | IBM00858 | OEM Multibahasa Latin I | |||
860 | IBM860 | Portugis (DOS) | |||
861 | ibm861 | Islandia (DOS) | |||
862 | DOS-862 | Ibrani (DOS) | |||
863 | IBM863 | Kanada Prancis (DOS) | |||
864 | IBM864 | Arab (864) | |||
865 | IBM865 | Nordik (DOS) | |||
866 | cp866 | Sirilik (DOS) | |||
869 | ibm869 | Yunani, Modern (DOS) | |||
870 | IBM870 | IBM EBCDIC (Multibahasa Latin-2) | |||
874 | windows-874 | Thai (Windows) | |||
875 | cp875 | IBM EBCDIC (Yunani Modern) | |||
932 | shift_jis | Jepang (Shift-JIS) | |||
936 | gb2312 | Mandarin Sederhana (GB2312) | ✓ | ||
949 | ks_c_5601-1987 | Korea | |||
950 | big5 | Tionghoa Tradisional (Big5) | |||
1026 | IBM1026 | IBM EBCDIC (Latin-5 Turki) | |||
1047 | IBM01047 | IBM Latin-1 | |||
1140 | IBM01140 | IBM EBCDIC (AS-Kanada-Euro) | |||
1141 | IBM01141 | IBM EBCDIC (Jerman-Euro) | |||
1142 | IBM01142 | IBM EBCDIC (Denmark-Norwegia-Euro) | |||
1143 | IBM01143 | IBM EBCDIC (Finlandia-Swedia-Euro) | |||
1144 | IBM01144 | IBM EBCDIC (Italia-Euro) | |||
1145 | IBM01145 | IBM EBCDIC (Spanyol-Euro) | |||
1146 | IBM01146 | IBM EBCDIC (Inggris-Euro) | |||
1147 | IBM01147 | IBM EBCDIC (Prancis-Euro) | |||
1148 | IBM01148 | IBM EBCDIC (Internasional-Euro) | |||
1149 | IBM01149 | IBM EBCDIC (Islandia-Euro) | |||
1200 | utf-16 | Unicode | ✓ | ✓ | ✓ |
1201 | unicodeFFFE | Unicode (Big endian) | ✓ | ✓ | ✓ |
1250 | windows-1250 | Eropa Tengah (Windows) | |||
1251 | windows-1251 | Sirilik (Windows) | |||
1252 | Windows-1252 | Eropa Barat (Windows) | ✓ | ||
1253 | windows-1253 | Yunani (Windows) | |||
1254 | windows-1254 | Turki (Windows) | |||
1255 | windows-1255 | Ibrani (Windows) | |||
1256 | windows-1256 | Arab (Windows) | |||
1257 | windows-1257 | Baltik (Windows) | |||
1258 | windows-1258 | Vietnam (Windows) | |||
1361 | Johab | Korea (Johab) | |||
10000 | Macintosh | Eropa Barat (Mac) | |||
10001 | x-mac-japanese | Jepang (Mac) | |||
10002 | x-mac-chinesetrad | Tionghoa Tradisional (Mac) | |||
10003 | x-mac-korean | Korea (Mac) | ✓ | ||
10004 | x-mac-arabic | Arab (Mac) | |||
10005 | x-mac-ibrani | Ibrani (Mac) | |||
10006 | x-mac-greek | Yunani (Mac) | |||
10007 | x-mac-cyrillic | Sirilik (Mac) | |||
10008 | x-mac-chinesesimp | Mandarin Sederhana (Mac) | ✓ | ||
10010 | x-mac-rumania | Rumania (Mac) | |||
10017 | x-mac-ukrainian | Ukraina (Mac) | |||
10021 | x-mac-thai | Thai (Mac) | |||
10029 | x-mac-ce | Eropa Tengah (Mac) | |||
10079 | x-mac-islandia | Islandia (Mac) | |||
10081 | x-mac-turki | Turki (Mac) | |||
10082 | x-mac-kroasia | Kroasia (Mac) | |||
12000 | utf-32 | Unicode (UTF-32) | ✓ | ✓ | ✓ |
12001 | utf-32BE | Unicode (UTF-32 Big endian) | ✓ | ✓ | ✓ |
20000 | x-Chinese-CNS | Tionghoa Tradisional (CNS) | |||
20001 | x-cp20001 | TCA Taiwan | |||
20002 | x-Chinese-Eten | Tionghoa Tradisional (Eten) | |||
20003 | x-cp20003 | IBM5550 Taiwan | |||
20004 | x-cp20004 | TeleTeks Taiwan | |||
20005 | x-cp20005 | Wang Taiwan | |||
20105 | x-IA5 | Eropa Barat (IA5) | |||
20106 | x-IA5-Jerman | Jerman (IA5) | |||
20107 | x-IA5-Swedia | Swedia (IA5) | |||
20108 | x-IA5-Norwegia | Norwegia (IA5) | |||
20127 | us-ascii | US-ASCII | ✓ | ✓ | ✓ |
20261 | x-cp20261 | T.61 | |||
20269 | x-cp20269 | ISO-6937 | |||
20273 | IBM273 | IBM EBCDIC (Jerman) | |||
20277 | IBM277 | IBM EBCDIC (Denmark-Norwegia) | |||
20278 | IBM278 | IBM EBCDIC (Finlandia-Swedia) | |||
20280 | IBM280 | IBM EBCDIC (Italia) | |||
20284 | IBM284 | IBM EBCDIC (Spanyol) | |||
20285 | IBM285 | IBM EBCDIC (Inggris) | |||
20290 | IBM290 | IBM EBCDIC (Katakana Jepang) | |||
20297 | IBM297 | IBM EBCDIC (Prancis) | |||
20420 | IBM420 | IBM EBCDIC (Arab) | |||
20423 | IBM423 | IBM EBCDIC (Yunani) | |||
20424 | IBM424 | IBM EBCDIC (Ibrani) | |||
20833 | x-EBCDIC-KoreanExtended | IBM EBCDIC (Diperluas Korea) | |||
20838 | IBM-Thai | IBM EBCDIC (Thailand) | |||
20866 | koi8-r | Sirilik (KOI8-R) | |||
20871 | IBM871 | IBM EBCDIC (Islandia) | |||
20880 | IBM880 | IBM EBCDIC (Sirilik Rusia) | |||
20905 | IBM905 | IBM EBCDIC (Turki) | |||
20924 | IBM00924 | IBM Latin-1 | |||
20932 | EUC-JP | Jepang (JIS 0208-1990 dan 0212-1990) | |||
20936 | x-cp20936 | Mandarin Sederhana (GB2312-80) | ✓ | ||
20949 | x-cp20949 | Wansung Korea | ✓ | ||
21025 | cp1025 | IBM EBCDIC (Sirilik Serbia-Bulgaria) | |||
21866 | koi8-u | Sirilik (KOI8-U) | |||
28591 | iso-8859-1 | Eropa Barat (ISO) | ✓ | ✓ | ✓ |
28592 | iso-8859-2 | Eropa Tengah (ISO) | |||
28593 | iso-8859-3 | Latin 3 (ISO) | |||
28594 | iso-8859-4 | Baltik (ISO) | |||
28595 | iso-8859-5 | Sirilik (ISO) | |||
28596 | iso-8859-6 | Arab (ISO) | |||
28597 | iso-8859-7 | Yunani (ISO) | |||
28598 | iso-8859-8 | Ibrani (ISO-Visual) | ✓ | ||
28599 | iso-8859-9 | Turki (ISO) | |||
28603 | iso-8859-13 | Estonia (ISO) | |||
28605 | iso-8859-15 | Latin 9 (ISO) | |||
29001 | x-Europa | Europa | |||
38598 | iso-8859-8-i | Ibrani (ISO-Logis) | ✓ | ||
50220 | iso-2022-jp | Jepang (JIS) | ✓ | ||
50221 | csISO2022JP | Jepang (JIS-Allow 1 byte Kana) | ✓ | ||
50222 | iso-2022-jp | Jepang (JIS-Allow 1 byte Kana - SO/SI) | ✓ | ||
50225 | iso-2022-kr | Korea (ISO) | ✓ | ||
50227 | x-cp50227 | Mandarin Sederhana (ISO-2022) | ✓ | ||
51932 | euc-jp | Jepang (EUC) | ✓ | ||
51936 | EUC-CN | Mandarin Sederhana (EUC) | ✓ | ||
51949 | euc-kr | Korea (EUC) | ✓ | ||
52936 | hz-gb-2312 | Mandarin Sederhana (HZ) | ✓ | ||
54936 | GB18030 | Mandarin Sederhana (GB18030) | ✓ | ||
57002 | x-iscii-de | ISCII Devanagari | ✓ | ||
57003 | x-iscii-be | ISCII Bengali | ✓ | ||
57004 | x-iscii-ta | ISCII Tamil | ✓ | ||
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 Malayalam | ✓ | ||
57010 | x-iscii-gu | ISCII Gujarati | ✓ | ||
57011 | x-iscii-pa | ISCII Punjabi | ✓ | ||
65000 | utf-7 | Unicode (UTF-7) | ✓ | ✓ | |
65001 | utf-8 | Unicode (UTF-8) | ✓ | ✓ | ✓ |
Contoh berikut memanggil GetEncoding(Int32) metode dan GetEncoding(String) untuk mendapatkan pengodean halaman kode Yunani (Windows). Ini membandingkan Encoding objek yang dikembalikan oleh panggilan metode untuk menunjukkan bahwa objek sama, lalu peta menampilkan titik kode Unicode dan nilai halaman kode yang sesuai untuk setiap karakter dalam alfabet Yunani.
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
Jika data yang akan dikonversi hanya tersedia dalam blok berurutan (seperti data yang dibaca dari aliran) atau jika jumlah data sangat besar sehingga perlu dibagi menjadi blok yang lebih kecil, Anda harus menggunakan Decoder atau Encoder yang disediakan oleh GetDecoder metode atau GetEncoder metode, masing-masing, dari kelas turunan.
Encoder UTF-16 dan UTF-32 dapat menggunakan urutan byte big endian (byte paling signifikan terlebih dahulu) atau urutan byte little endian (byte paling tidak signifikan terlebih dahulu). Misalnya, Huruf Kapital Latin A (U+0041) diserialisasikan sebagai berikut (dalam heksadesimal):
- Pesanan byte big endian UTF-16: 00 41
- Urutan byte little endian UTF-16: 41 00
- Pesanan byte big endian UTF-32: 00 00 00 41
- Urutan byte little endian UTF-32: 41 00 00 00
Umumnya lebih efisien untuk menyimpan karakter Unicode menggunakan urutan byte asli. Misalnya, lebih baik menggunakan urutan byte little endian pada platform little endian, seperti komputer Intel.
Metode ini GetPreamble mengambil array byte yang menyertakan tanda urutan byte (BOM). Jika array byte ini diawali ke aliran yang dikodekan, itu membantu dekoder untuk mengidentifikasi format pengodean yang digunakan.
Untuk informasi selengkapnya tentang urutan byte dan tanda urutan byte, lihat Standar Unicode di halaman beranda Unicode.
Perhatikan bahwa kelas pengodean memungkinkan kesalahan untuk:
- Secara diam-diam berubah menjadi karakter "?".
- Gunakan karakter "paling cocok".
- Ubah ke perilaku khusus aplikasi melalui penggunaan EncoderFallback kelas dan DecoderFallback dengan karakter pengganti U+FFFD Unicode.
Anda harus memberikan pengecualian pada kesalahan aliran data apa pun. Aplikasi menggunakan bendera "throwonerror" jika berlaku atau menggunakan EncoderExceptionFallback kelas dan DecoderExceptionFallback . Fallback paling pas sering tidak disarankan karena dapat menyebabkan kehilangan atau kebingungan data dan lebih lambat daripada penggantian karakter sederhana. Untuk pengodean ANSI, perilaku yang paling cocok adalah default.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk