Noções básicas sobre codificações

Internamente, o .NET estrutura armazena o texto sistema autônomo Unicode UTF-16.Um codificador transforma esses dados de texto para uma sequência de bytes.Um decodificador transforma uma sequência de bytes neste formato interno.Uma codificação descreve as regras, que opera um codificador ou o decodificador.Por exemplo, a UTF8Encoding classe descreve sistema autônomo regras para codificação e decodificação de uma sequência de bytes que representa o texto sistema autônomo Unicode UTF-8. Codificar e decodificar também podem incluir determinadas etapas de validação.Por exemplo, a UnicodeEncoding classe verifica todos os substitutos para certificar-se de que eles constituem pares substitutos válido. Essas duas classes herdam o Encoding classe.

Escolha uma codificação

O padrão Unicode atribui um ponto de código (um número) a cada caractere em todos os scripts com suporte.Um Unicode Transformation formatar (UTF) é uma maneira para codificar esse ponto de código.Para obter mais informações sobre UTFs recebe suportados as classes no System.Text, consulte usando a codificação de Unicode em Unicode no .NET estrutura.

Selecionando uma classe de codificação

The Encoding classe é muito geral. Com suporte classes herdadas da Encoding permitir que aplicativos .NET trabalhar com as codificações comuns que eles provavelmente encontrados em aplicativos herdado e você pode implementar codificações adicionais. No entanto, quando você tem a oportunidade de escolher uma codificação, você é altamente recomendados para usar um codificação, normalmente um dos UnicodeUTF8Encoding ou UnicodeEncoding (UTF32Encoding também é suportada). Em particular, UTF8Encoding é preferível sobre ASCIIEncoding. Se o conteúdo for ASCII, as duas codificações são idênticas, mas UTF8Encoding também podem representar cada Unicode caracteres, ao mesmo tempo ASCIIEncoding oferece suporte somente a 007F de valores entre U + 0000 e U + de caractere Unicode. Porque ASCIIEncoding não fornece detecção de erros UTF8Encoding também é melhor para a segurança.

UTF8Encoding foi ajustado para ser o mais rápido possível e deve ser mais rápido do que qualquer Outros codificação. Até mesmo para conteúdo que é totalmente ASCII, as operações realizadas com UTF8Encoding são mais rápidas que as operações executadas com ASCIIEncoding. Você deve considerar o uso de ASCIIEncoding somente para determinados aplicativos legados. No entanto, até mesmo nesse caso, UTF8Encoding ainda será a melhor opção. Supondo que configurações do padrão, os cenários a seguir podem ocorrer:

  • Se seu aplicativo tiver conteúdo que não seja estritamente ASCII e ele codifica com ASCIIEncoding, cada caractere não-ASCII codifica sistema autônomo um ponto de interrogação ("?"). Se o aplicativo decodifica esses dados, as informações serão perdidas.

  • Se o aplicativo tem conteúdo que não seja estritamente ASCII e ele codifica com UTF8Encoding, o resultado parece incompreensíveis se interpretada sistema autônomo ASCII. No entanto, se o aplicativo decodifica esses dados, o dados executa uma viagem de ida e volta com êxito.

Escolhendo uma estratégia de fallback

Quando um aplicativo tenta codificar ou decodificar um caractere, mas não existe mapeamento, ele deve implementar uma estratégia de fallback, que é um mecanismo de tratamento de falhas.Há dois tipos de estratégias alternativas:

  1. Melhor ajuste fallback

    Quando caracteres não têm uma correspondência exata em que o destino de codificação/decodificação, o aplicativo pode tentar MAP-os para um caractere similar.

  2. Seqüência de caracteres de substituição fallback

    Se não houver nenhum apropriada de caractere semelhante, o aplicativo pode especificar uma seqüência de caractere de substituição.

Por exemplo, um aplicativo pode chamar GetEncoding(1252, 0, 0) (consulte a GetEncoding). Essa telefonar Especifica a página de código 1252 (a página de código Windows para idiomas da Europa Ocidental) com encoderFallback e decoderFallback especificado sistema autônomo zero. O comportamento padrão é um melhor ajuste mapeamento para determinados caracteres Unicode.Por exemplo, um CÍRCULO latina maiúsculas LETTER S (U + 24 C 8) é alterado para latina maiúsculas LETTER S (U + 0053) antes que está codificado, durante cinco SOBRESCRITO (U + 2075) é alterado para cinco DÍGITOS (U + 0035).Se o aplicativo decodifica de página de código 1252 novamente para Unicode, o círculo para a carta é perdida e 2 5 se torna a 25.Outros conversões podem ser ainda mais drásticas.Por exemplo, o Unicode infinito símbolo (U + 221E) pode ser mapeado para oito DÍGITOS (U + 0038).

Melhores estratégias de ajuste variam para diferentes páginas de código e não são documentados em detalhes.Por exemplo, para algumas páginas de código Latina de largura total caracteres MAP aos caracteres Latina de meia largura mais comuns.Para Outros páginas de código, esse mapeamento não é feito.

Mesmo sob uma agressiva melhor ajuste estratégia, não há nenhum ajuste imaginável para alguns caracteres em algumas codificações.Por exemplo, um ideograma chinês não tem nenhum mapeamento razoável de código 1252 de página.Nesse caso, é usada uma seqüência de caracteres de substituição.Por padrão, essa seqüência de caracteres é apenas um único ponto de INTERROGAÇÃO (U + 003F).

Melhor ajuste mapeamento é o comportamento padrão de Encoding, que codifica dados Unicode em dados de página de código, e há aplicativos legados que contam com esse comportamento. No entanto, a maioria dos novos aplicativos devem evitar melhor comportamento de ajuste por razões de segurança.Por exemplo, aplicativos não devem colocar um nome de domínio por meio de uma codificação de ajuste melhor.

Os aplicativos devem usar seguintes alternativas para o mapeamento de ajuste melhor:

Duas observações adicionais sobre melhor se adapte a codificação (ou decodificação) estratégias alternativas:

  • Melhor ajuste é principalmente uma questão codificação, não um problema de decodificação.Existem muito poucas páginas de código que contêm caracteres que não podem ser mapeados com êxito para Unicode.Como esses caracteres não são comumente usados, eles foram omitidos do Unicode.

  • Não existem objetos nomeados com suporte correspondente as restaurações melhores ajuste.O melhor ajuste fallback para cada página de código é diferente.Se seu aplicativo precisa comutador entre o melhor ajuste e alguns Outros fallback para um único Encoding objeto, ele deve copiar o objeto original de melhor ajuste para uma variável antes de atribuir qualquer Outros objeto de fallback. O aplicativo pode, então, recuperar o melhor ajuste fallback, atribuindo esse valor Encoding.EncoderFallback ou Encoding.DecoderFallback.

Consulte também

Tarefas

Exemplo de aplicativo de codificação de fallback

Referência

Decoding

DecoderFallback

Encoding

EncoderFallback

Outros recursos

Codificação e localização