Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.
Kelas Encoding mewakili pengkodean 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 digunakan pada karakter Unicode, bukan pada data biner sembarang, 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 kelas Encoding 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 properti ASCII.
UTF7Encoding mengodekan karakter Unicode menggunakan pengodean UTF-7. Pengodean ini mendukung semua nilai karakter Unicode. Halaman kode 65000. Juga tersedia melalui properti UTF7.
UTF8Encoding mengodekan karakter Unicode menggunakan pengodean UTF-8. Pengodean ini mendukung semua nilai karakter Unicode. Halaman kode 65001. Juga tersedia melalui properti UTF8.
UnicodeEncoding mengodekan karakter Unicode menggunakan pengodean UTF-16. Pesanan byte little endian dan big endian didukung. Juga tersedia melalui properti Unicode dan properti BigEndianUnicode.
UTF32Encoding mengodekan karakter Unicode menggunakan pengodean UTF-32. Urutan byte little endian (halaman kode 12000) dan big endian (halaman kode 12001) didukung. Juga tersedia melalui properti UTF32.
Kelas Encoding terutama dimaksudkan untuk mengonversi antara pengodean yang berbeda dan Unicode. Seringkali salah satu kelas Unicode turunan adalah pilihan yang benar untuk aplikasi Anda.
Gunakan metode GetEncoding untuk mendapatkan pengodean lain, dan panggil metode GetEncodings untuk mendapatkan daftar semua pengodean.
Daftar enkoding
Tabel berikut mencantumkan pengodean yang didukung oleh .NET. Ini mencantumkan nomor halaman kode setiap pengodean dan nilai dari properti EncodingInfo.Name dan EncodingInfo.DisplayName dari pengodean. Tanda centang di kolom dukungan .NET Framework, .NET Core, atau .NET 5 dan yang lebih baru menunjukkan bahwa page kode didukung secara native oleh implementasi .NET tersebut, terlepas dari platform yang digunakan. 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 kelas System.Text.CodePagesEncodingProvider atau dengan berasal dari kelas System.Text.EncodingProvider.
Nota
Halaman kode yang properti EncodingInfo.Name-nya 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 (US-Canada) | |||
| 437 | IBM437 | OEM Amerika Serikat | |||
| 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 | Bahasa 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 (Modern Yunani) | |||
| 932 | shift_jis | Jepang (Shift-JIS) | |||
| 936 | gb2312 | Mandarin Sederhana (GB2312) | ✓ | ||
| 949 | ks_c_5601-1987 | Bahasa Korea | |||
| 950 | big5 | Tionghoa Tradisional (Big5) | |||
| 1026 | IBM1026 | IBM EBCDIC (Latin-5 Turki) | |||
| 1047 | IBM01047 | IBM Latin-1 | |||
| 1140 | IBM01140 | IBM EBCDIC (US-Canada-Euro) | |||
| 1141 | IBM01141 | IBM EBCDIC (Germany-Euro) | |||
| 1142 | IBM01142 | IBM EBCDIC (Denmark-Norway-Euro) | |||
| 1143 | IBM01143 | IBM EBCDIC (Finlandia-Sweden-Euro) | |||
| 1144 | IBM01144 | IBM EBCDIC (Italy-Euro) | |||
| 1145 | IBM01145 | IBM EBCDIC (Spain-Euro) | |||
| 1146 | IBM01146 | IBM EBCDIC (UK-Euro) | |||
| 1147 | IBM01147 | IBM EBCDIC (France-Euro) | |||
| 1148 | IBM01148 | IBM EBCDIC (International-Euro) | |||
| 1149 | IBM01149 | IBM EBCDIC (Icelandic-Euro) | |||
| 1.200 | utf-16 | Unicode | ✓ | ✓ | ✓ |
| 1201 | unicodeFFFE | Unicode (Endian besar) | ✓ | ✓ | ✓ |
| 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 | Bahasa Vietnam (Windows) | |||
| 1361 | Johab | Korea (Johab) | |||
| 10.000 | Macintosh | Eropa Barat (Mac) | |||
| 10001 | x-mac-japanese | Jepang (Mac) | |||
| 10002 | x-mac-chinesetrad | Tionghoa Tradisional (Mac) | |||
| 10003 | x-mac-korean | Bahasa 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-islandik | 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-German | Jerman (IA5) | |||
| 20107 | x-IA5-Swedish | Swedia (IA5) | |||
| 20108 | x-IA5-Norwegian | 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-Norway) | |||
| 20278 | IBM278 | IBM EBCDIC (Finland-Sweden) | |||
| 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 (Bahasa 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 (Kiril 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 Serbian-Bulgarian) | |||
| 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-Logical) | ✓ | ||
| 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 | Bahasa Korea (EUC) | ✓ | ||
| 52936 | hz-gb-2312 | Bahasa Cina Sederhana (HZ) | ✓ | ||
| 54936 | GB18030 | Mandarin Sederhana (GB18030) | ✓ | ||
| 57002 | x-iscii-de | ISCII Devanagari | ✓ | ||
| 57003 | x-iscii-be | ISCII Bahasa Bengali | ✓ | ||
| 57004 | x-iscii-ta | ISCII Tamil | ✓ | ||
| 57005 | x-iscii-te | ISCII untuk bahasa Telugu | ✓ | ||
| 57006 | x-iscii-as | ISCII Bahasa Assam | ✓ | ||
| 57007 | x-iscii-or | ISCII Oriya | ✓ | ||
| 57008 | x-iscii-ka | ISCII Kannada | ✓ | ||
| 57009 | x-iscii-ma | Standar Kode Karakter ISCII untuk 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 metode GetEncoding(Int32) dan GetEncoding(String) untuk mendapatkan pengodean halaman kode Yunani (Windows). Ini membandingkan objek Encoding yang dikembalikan oleh panggilan metode untuk menunjukkan bahwa objek tersebut 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($"{enc.EncodingName} = Code Page {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 metode GetDecoder atau metode GetEncoder, masing-masing, dari kelas turunan.
Pengode UTF-16 dan UTF-32 dapat menggunakan pengurutan bita big endian (byte paling signifikan terlebih dahulu) atau pengurutan bita 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 berbasis Intel.
Metode GetPreamble mengambil array byte yang menyertakan tanda urutan byte (BOM). Jika array byte ini digabungkan dengan aliran yang dikodekan, ini membantu dekoder 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 terjadinya kesalahan.
- Secara diam-diam berubah menjadi karakter "?".
- Gunakan karakter "paling cocok".
- Ubah ke perilaku khusus aplikasi melalui penggunaan kelas EncoderFallback dan DecoderFallback dengan karakter penggantian Unicode U+FFFD.
Anda harus memberikan pengecualian pada kesalahan aliran data apa pun. Aplikasi menggunakan bendera "throwonerror" jika berlaku atau menggunakan kelas EncoderExceptionFallback dan DecoderExceptionFallback. Cadangan penyesuaian terbaik sering tidak disarankan karena dapat menyebabkan kehilangan data atau kebingungan dan lebih lambat dibandingkan dengan penggantian karakter sederhana. Untuk pengodean ANSI, perilaku yang paling cocok adalah default.