Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece comentários complementares à documentação de referência para esta API.
A Encoding classe representa uma codificação de caracteres.
A codificação é o processo de transformação de um conjunto de caracteres Unicode em uma sequência de bytes. Por outro lado, a decodificação é o processo de transformar uma sequência de bytes codificados em um conjunto de caracteres Unicode. Para obter informações sobre os UTFs (Formatos de Transformação Unicode) e outras codificações com Encodingsuporte, consulte Codificação de Caracteres no .NET.
Encoding destina-se a operar em caracteres Unicode em vez de dados binários arbitrários, como matrizes de bytes. Se você precisar codificar dados binários arbitrários em texto, deverá usar um protocolo como uuencode, que é implementado por métodos como Convert.ToBase64CharArray.
O .NET fornece as seguintes implementações da Encoding classe para dar suporte a codificações Unicode atuais e outras codificações:
ASCIIEncoding codifica caracteres Unicode como caracteres ASCII de 7 bits únicos. Essa codificação só dá suporte a valores de caractere entre U+0000 e U+007F. Página de código 20127. Também disponível pela propriedade ASCII.
UTF7Encoding codifica caracteres Unicode usando a codificação UTF-7. Essa codificação dá suporte a todos os valores de caractere Unicode. Página de código 65000. Também disponível pela propriedade UTF7.
UTF8Encoding codifica caracteres Unicode usando a codificação UTF-8. Essa codificação dá suporte a todos os valores de caractere Unicode. Página de código 65001. Também disponível pela propriedade UTF8.
UnicodeEncoding codifica caracteres Unicode usando a codificação UTF-16. Há suporte para ordens de byte little endian e big endian. Também disponível pela propriedade Unicode e pela propriedade BigEndianUnicode.
UTF32Encoding codifica caracteres Unicode usando a codificação UTF-32. Os pedidos de bytes little endian (página de código 12000) e big endian (página de código 12001) contam com suporte. Também disponível pela propriedade UTF32.
A Encoding classe destina-se principalmente a converter entre codificações diferentes e Unicode. Geralmente, uma das classes Unicode derivadas é a escolha correta para seu aplicativo.
Use o GetEncoding método para obter outras codificações e chame o GetEncodings método para obter uma lista de todas as codificações.
Lista de codificações
A tabela a seguir lista as codificações compatíveis com o .NET. Ele lista o número da página de código de cada codificação e os valores das propriedades EncodingInfo.Name e EncodingInfo.DisplayName da codificação. Uma marca de verificação no suporte ao .NET Framework, suporte ao .NET Core ou suporte ao .NET 5 e posterior indica que a página de código é suportada nativamente por essa implementação do .NET, independentemente da plataforma subjacente. Para o .NET Framework, a disponibilidade de outras codificações listadas na tabela depende do sistema operacional. Para versões .NET Core e .NET 5 e posteriores, outras codificações estão disponíveis usando a System.Text.CodePagesEncodingProvider classe ou derivando da System.Text.EncodingProvider classe.
Observação
Páginas de código cuja EncodingInfo.Name propriedade corresponde a um padrão internacional não necessariamente cumprem integralmente esse padrão.
| Página de código | Nome | Nome de exibição | Suporte ao .NET Framework | Suporte ao .NET Core | Suporte ao .NET 5 e posterior |
|---|---|---|---|---|---|
| 37 | IBM037 | IBM EBCDIC (US-Canada) | |||
| 437 | IBM437 | OEM Estados Unidos | |||
| 500 | IBM500 | IBM EBCDIC (Internacional) | |||
| 708 | ASMO-708 | Árabe (ASMO 708) | |||
| 720 | DOS-720 | Árabe (DOS) | |||
| 737 | ibm737 | Grego (DOS) | |||
| 775 | ibm775 | Báltico (DOS) | |||
| 850 | ibm850 | Europa Ocidental (DOS) | |||
| 852 | ibm852 | Europa Central (DOS) | |||
| 855 | IBM855 | Cirílico OEM | |||
| 857 | ibm857 | Turco (DOS) | |||
| 858 | IBM00858 | OEM Multilíngue Latim I | |||
| 860 | IBM860 | Português (DOS) | |||
| 861 | ibm861 | Islandês (DOS) | |||
| 862 | DOS-862 | Hebraico (DOS) | |||
| 863 | IBM863 | Francês do Canadá (DOS) | |||
| 864 | IBM864 | Árabe (864) | |||
| 865 | IBM865 | Nórdico (DOS) | |||
| 866 | cp866 | Cirílico (DOS) | |||
| 869 | ibm869 | Grego, Moderno (DOS) | |||
| 870 | IBM870 | IBM EBCDIC (Latino 2 Multilíngue) | |||
| 874 | windows-874 | Tailandês (Windows) | |||
| 875 | cp875 | IBM EBCDIC (grego moderno) | |||
| 9:32 | shift_jis | Japonês (Shift-JIS) | |||
| 936 | gb2312 | Chinês Simplificado (GB2312) | ✓ | ||
| 949 | ks_c_5601-1987 | Coreano | |||
| 950 | big5 | Chinês tradicional (Big5) | |||
| 1026 | IBM1026 | IBM EBCDIC (Turco Latino 5) | |||
| 1047 | IBM01047 | IBM Latin-1 | |||
| 1140 | IBM01140 | IBM EBCDIC (US-Canada-Euro) | |||
| 1141 | IBM01141 | IBM EBCDIC (Germany-Euro) | |||
| 1142 | IBM01142 | IBM EBCDIC (Dinamarca-Norway-Euro) | |||
| 1143 | IBM01143 | IBM EBCDIC (Finlândia-Sweden-Euro) | |||
| 1144 | IBM01144 | IBM EBCDIC (Italy-Euro) | |||
| 1.145 | 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 (Big Endian) | ✓ | ✓ | ✓ |
| 1250 | windows-1250 | Europa Central (Windows) | |||
| 1251 | windows-1251 | Cirílico (Windows) | |||
| 1252 | Windows-1252 | Europa Ocidental (Windows) | ✓ | ||
| 1253 | windows-1253 | Grego (Windows) | |||
| 1254 | windows-1254 | Turco (Windows) | |||
| 1255 | windows-1255 | Hebraico (Windows) | |||
| 1256 | windows-1256 | Árabe (Windows) | |||
| 1257 | windows-1257 | Báltico (Windows) | |||
| 1258 | windows-1258 | Vietnamita (Windows) | |||
| 1361 | Joabe | Coreano (Johab) | |||
| 10.000 | Macintosh | Europa Ocidental (Mac) | |||
| 10001 | x-mac-japanese | Japonês (Mac) | |||
| 10002 | x-mac-chinesetrad | Chinês Tradicional (Mac) | |||
| 10003 | x-mac-korean | Coreano (Mac) | ✓ | ||
| 10004 | x-mac-arabic | Árabe (Mac) | |||
| 10005 | x-mac-hebraico | Hebraico (Mac) | |||
| 10006 | x-mac-greek | Grego (Mac) | |||
| 10007 | x-mac-cyrillic | Cirílico (Mac) | |||
| 10008 | x-mac-chinesesimp | Chinês Simplificado (Mac) | ✓ | ||
| 10010 | x-mac-romeno | Romeno (Mac) | |||
| 10017 | x-mac-ucraniano | Ucraniano (Mac) | |||
| 10021 | x-mac-thai | Tailandês (Mac) | |||
| 10029 | x-mac-ce | Europa Central (Mac) | |||
| 10079 | x-mac-islandês | Islandês (Mac) | |||
| 10081 | x-mac-turkish | Turco (Mac) | |||
| 10082 | x-mac-croata | Croata (Mac) | |||
| 12000 | utf-32 | Unicode (UTF-32) | ✓ | ✓ | ✓ |
| 12001 | utf-32BE | Unicode (UTF-32 Big endian) | ✓ | ✓ | ✓ |
| 20000 | x-Chinese-CNS | Chinês Tradicional (CNS) | |||
| 20001 | x-cp20001 | TCA Taiwan | |||
| 20002 | x-Chinese-Eten | Chinês, tradicional (Eten) | |||
| 20003 | x-cp20003 | IBM5550 Taiwan | |||
| 20004 | x-cp20004 | TeleText Taiwan | |||
| 20005 | x-cp20005 | Wang Taiwan | |||
| 20105 | x-IA5 | Europa Ocidental (IA5) | |||
| 20106 | x-IA5-German | Alemão (IA5) | |||
| 20107 | x-IA5-Swedish | Sueco (IA5) | |||
| 20108 | x-IA5-Norwegian | Norueguês (IA5) | |||
| 20127 | us-ascii | US-ASCII | ✓ | ✓ | ✓ |
| 20261 | x-cp20261 | T.61 | |||
| 20269 | x-cp20269 | ISO-6937 | |||
| 20273 | IBM273 | IBM EBCDIC (Alemanha) | |||
| 20277 | IBM277 | IBM EBCDIC (Denmark-Norway) | |||
| 20278 | IBM278 | IBM EBCDIC (Finland-Sweden) | |||
| 20280 | IBM280 | IBM EBCDIC (Itália) | |||
| 20284 | IBM284 | IBM EBCDIC (Espanha) | |||
| 20285 | IBM285 | IBM EBCDIC (Reino Unido) | |||
| 20290 | IBM290 | IBM EBCDIC (katakana japonesa) | |||
| 20297 | IBM297 | IBM EBCDIC (França) | |||
| 20420 | IBM420 | IBM EBCDIC (árabe) | |||
| 20423 | IBM423 | IBM EBCDIC (grego) | |||
| 20424 | IBM424 | IBM EBCDIC (Hebraico) | |||
| 20833 | x-EBCDIC-KoreanExtended | IBM EBCDIC (Coreano Estendido) | |||
| 20838 | IBM-Thai | IBM EBCDIC (tailandês) | |||
| 20866 | koi8-r | Cirílico (KOI8-R) | |||
| 20871 | IBM871 | IBM EBCDIC (islandês) | |||
| 20880 | IBM880 | IBM EBCDIC (russo cirílico) | |||
| 20905 | IBM905 | IBM EBCDIC (turco) | |||
| 20924 | IBM00924 | IBM Latin-1 | |||
| 20932 | EUC-JP | Japonês (JIS 0208-1990 e 0212-1990) | |||
| 20936 | x-cp20936 | Chinês simplificado (GB2312-80) | ✓ | ||
| 20949 | x-cp20949 | Wansung coreano | ✓ | ||
| 21025 | cp1025 | IBM EBCDIC (Serbian-Bulgariancirílico) | |||
| 21866 | koi8-u | Cirílico (KOI8-U) | |||
| 28591 | iso-8859-1 | Europa Ocidental (ISO) | ✓ | ✓ | ✓ |
| 28592 | iso-8859-2 | Europa Central (ISO) | |||
| 28593 | iso-8859-3 | Latino 3 (ISO) | |||
| 28594 | iso-8859-4 | Báltico (ISO) | |||
| 28595 | iso-8859-5 | Cirílico (ISO) | |||
| 28596 | iso-8859-6 | Árabe (ISO) | |||
| 28597 | iso-8859-7 | Grego (ISO) | |||
| 28598 | iso-8859-8 | Hebraico (ISO-Visual) | ✓ | ||
| 28599 | iso-8859-9 | Turco (ISO) | |||
| 28603 | iso-8859-13 | Estoniano (ISO) | |||
| 28605 | iso-8859-15 | Latino 9 (ISO) | |||
| 29001 | x Europa | Europa | |||
| 38598 | iso-8859-8-i | Hebraico (ISO-Logical) | ✓ | ||
| 50220 | iso-2022-jp | Japonês (JIS) | ✓ | ||
| 50221 | csISO2022JP | Japonês (JIS-Allow 1 byte Kana) | ✓ | ||
| 50222 | iso-2022-jp | Japonês (JIS-Allow 1 byte Kana – SO/SI) | ✓ | ||
| 50225 | iso-2022-kr | Coreano (ISO) | ✓ | ||
| 50227 | x-cp50227 | Chinês Simplificado (ISO-2022) | ✓ | ||
| 51932 | euc-jp | Japonês (EUC) | ✓ | ||
| 51936 | EUC-CN | Chinês (Simplificado) (EUC) | ✓ | ||
| 51949 | euc-kr | Coreano (EUC) | ✓ | ||
| 52936 | hz-gb-2312 | HZ (chinês simplificado) | ✓ | ||
| 54936 | GB18030 | Chinês (Simplificado) (GB18030) | ✓ | ||
| 57002 | x-iscii-de | ISCII Devanagari | ✓ | ||
| 57003 | x-iscii-be | ISCII Bengali | ✓ | ||
| 57004 | x-iscii-ta | TÂMIL ISCII | ✓ | ||
| 57005 | x-iscii-te | ISCII Telugu | ✓ | ||
| 57006 | x-iscii-as | ISCII Assamês | ✓ | ||
| 57007 | x-iscii-or | ISCII Oriya | ✓ | ||
| 57008 | x-iscii-ka | ISCII Kannada | ✓ | ||
| 57009 | x-iscii-ma | ISCII Malaiala | ✓ | ||
| 57010 | x-iscii-gu | ISCII Gujarati | ✓ | ||
| 57011 | x-iscii-pa | ISCII Punjabi | ✓ | ||
| 65000 | utf-7 | Unicode (UTF-7) | ✓ | ✓ | |
| 65001 | utf-8 | Unicode (UTF-8) | ✓ | ✓ | ✓ |
O exemplo a seguir chama os métodos GetEncoding(Int32) e GetEncoding(String) para obter a codificação da página de código grego (Windows). Ele compara os Encoding objetos retornados pelas chamadas de método para mostrar que eles são iguais e, em seguida, mapeia e exibe o ponto de código Unicode e o valor da página de código correspondente para cada caractere no alfabeto grego.
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
Se os dados a serem convertidos estiverem disponíveis apenas em blocos sequenciais (como dados lidos de um fluxo) ou se a quantidade de dados for tão grande que precisar ser dividida em blocos menores, você deverá usar o Decoder método ou Encoder o GetDecoder método fornecido pelo GetEncoder método, respectivamente, de uma classe derivada.
Os codificadores UTF-16 e UTF-32 podem usar a ordem de byte big endian (com o byte mais significativo primeiro) ou a ordem de byte little endian (com o byte menos significativo primeiro). Por exemplo, a Letra Maiúscula Latina A (U+0041) é serializada da seguinte maneira (em hexadecimal):
- A ordem de bytes de big endian UTF-16: 00 41
- A ordem de bytes de little endian UTF-16: 41 00
- A ordem de bytes de big endian UTF-32: 00 00 00 41
- A ordem de bytes de little endian UTF-32: 41 00 00 00
Geralmente, é mais eficiente armazenar caracteres Unicode usando a ordem de bytes nativa. Por exemplo, é melhor usar a ordem dos bytes de little endian em plataformas little endian, como computadores da Intel.
O GetPreamble método recupera uma matriz de bytes que inclui a marca de ordem de bytes (BOM). Se essa matriz de bytes for prefixada em um fluxo codificado, ela ajudará o decodificador a identificar o formato de codificação usado.
Para obter mais informações sobre a ordem de bytes e a marca de ordem de bytes, consulte o Padrão Unicode na home page unicode.
Observe que as classes de codificação permitem erros em:
- Troque silenciosamente para um caractere "?".
- Use um caractere "mais adequado".
- Troque por um comportamento específico do aplicativo com o uso das classes EncoderFallback e DecoderFallback com o caractere de substituição Unicode U+FFFD.
Você deve lançar uma exceção em qualquer erro de transmissão de dados. Um aplicativo usa um sinalizador "throwonerror" quando pertinente ou usa as classes EncoderExceptionFallback e DecoderExceptionFallback. Geralmente, o fallback de melhor ajuste não é recomendado, pois pode causar perda de dados ou confusão, além de ser mais lento do que substituições simples de caracteres. Para codificações ANSI, o melhor comportamento de ajuste é o padrão.