Compartilhar via


Usando a codificação Unicode

Aplicativos que direcione o common linguagem tempo de execução usar codificação a ser MAP representações do esquema caractere nativo (Unicode) de outros esquemas de caracteres.Aplicativos usam decodificação para mapear caracteres de esquemas não nativos (não-Unicode) para o esquema nativo.The System.Text espaço para nome fornece várias classes que permitem que os aplicativos para codificar e decodificar caracteres. Uma introdução a essas classes é fornecida em Noções básicas sobre codificações.

Formatos de transformação de Unicode

O padrão Unicode atribui um ponto de código (um número) a cada caractere em todos os scripts com suporte.Um UTF (Unicode transformação Format) é um formato usado para codificar aquele ponto de código.A versão 3.2 do padrão Unicode usa os UTFs e outras codificações definidas na tabela a seguir.Para todas as codificações as cadeias de caracteres do .NET estrutura internas são seqüências de caracteres UTF-16 nativas.

  • Codificação Unicode UTF-32
    Representa caracteres Unicode sistema autônomo seqüências de números inteiros de 32 bit.O aplicativo pode usar o UTF32Encoding classe para converter caracteres para e da codificação UTF-32.

    UTF-32 é usada quando os aplicativos precisam evitar o comportamento ponto de código substituto do UTF-16 em sistemas operacionais para a qual espaço codificado é muito importante.Observe que ainda podem ser codificados único "glifos" renderizados em uma tela com mais de um caractere UTF-32.Os caracteres suplementares suscetíveis a esse comportamento são atualmente muito mais raros de caracteres Unicode BMP.

  • Codificação Unicode UTF-16
    Representa caracteres Unicode sistema autônomo seqüências de números inteiros de 16 bit.O aplicativo pode usar o UnicodeEncoding classe para converter caracteres para e de codificação UTF-16.

    UTF-16 é freqüente nativamente, sistema autônomo no Microsoft.NET char tipo, o Windows WCHAR tipo e outros tipos comuns. Pontos de código Unicode mais comuns têm apenas um ponto de código UTF-16 (2 bytes).Caracteres suplementares do Unicode u+10000 e maior que ainda exigem dois pontos de código de substitutos do UTF-16.

  • Codificação Unicode UTF-8
    Representa caracteres Unicode sistema autônomo seqüências de bytes de 8 bit.O aplicativo pode usar o UTF8Encoding classe para converter caracteres para e de codificação UTF-8.

    UTF-8 permite a codificação com tamanhos de dados de 8 bit e funciona bem com muitos sistemas operacionais já existentes.Para o intervalo ASCII de caracteres, UTF-8 é idêntica à codificação ASCII e permite que um conjunto mais amplo de caracteres.Para scripts CJK, entretanto, UTF-8 pode exigir três bytes para cada caractere, acarretando possíveis dados de tamanho maior que UTF-16.Observe que algumas vezes a quantidade de dados ASCII, tais sistema autônomo Rótulos HTML, justifica o aumento no dimensionar do intervalo de CJK.

  • Codificação Unicode UTF-7
    Representa caracteres Unicode sistema autônomo seqüências de caracteres ASCII de 7 bit.O aplicativo pode usar o UTF7Encoding classe para converter caracteres para e de codificação UTF-7. Caracteres Unicode que não são ASCII são representados por uma sequência de escape de caracteres ASCII.

    UTF-7 oferece suporte a determinados protocolos para a qual são necessário, com freqüência os protocolos de email e grupo de notícias.No entanto, UTF-7 não é particularmente seguro ou robusto.Em algumas situações, alterar um bit pode alterar radicalmente a interpretação de uma cadeia de caracteres UTF-7 inteira.Em outras situações, seqüências de caracteres UTF-7 diferentes podem codificar o mesmo texto.Para obter seqüências que incluem caracteres não ASCII, UTF-7 é muito menos espaço eficiente que UTF-8 e codificação/decodificação é mais lento.Conseqüentemente, os aplicativos geralmente devem preferir UTF-8 para UTF-7.

  • Codificação ASCII
    Codifica o alfabeto Latina sistema autônomo caracteres ASCII de 7 bit únicos.Como essa codificação só oferece suporte a valores de caractere de U + 0000 com U + 007F, é inadequado na maioria dos casos para aplicativos internacionalizados.O aplicativo pode usar o ASCIIEncoding classe para converter caracteres para e de codificação ASCII. Para obter exemplos de como usar essa classe no código, consulte Codificação tipos base.

  • Codificações ANSI/ISO
    Usado para codificação de não-Unicode.The Encoding classe fornece suporte para codificações uma ampla gama de ANSI/ISO.

Passando dados binário em seqüências de caracteres

Coleções aleatórias de números de bytes ou caracteres, não faça uma seqüência de caracteres válida ou Unicode válida.Seu aplicativo não pode converter uma matriz de byte em Unicode ou vice-versa e esperam que ele funcione.Determinados caracteres e seqüências de ponto de código são ilegais do Unicode 5.0 e não são convertidos com qualquer uma das codificações Unicode.Se seu aplicativo deve passar dados binário em um formato de seqüência de caracteres, ele deve usar base 64 ou outro formato projetado para essa finalidade.

Usando a classe de codificação

O aplicativo pode usar o GetEncoding método para retornar um objeto de codificação para uma codificação especificada. O aplicativo pode usar o GetBytes método para converter uma seqüência de caracteres Unicode em sua representação de byte em uma codificação especificada.

O exemplo de código a seguir usa o GetEncoding método para criar um objeto de codificação de destino para uma página de código especificada. The GetBytes método é chamado de objeto para converter uma seqüência de caracteres Unicode em sua representação de byte na codificação de destino de codificação de destino. As representações de byte das cadeias de caracteres nas páginas de código especificada são exibidas.

Imports System
Imports System.IO
Imports System.Globalization
Imports System.Text

Public Class Encoding_UnicodeToCP
   Public Shared Sub Main()
      ' Converts ASCII characters to bytes.
      ' Displays the string's byte representation in the 
      ' specified code page.
      ' Code page 1252 represents Latin characters.
      PrintCPBytes("Hello, World!", 1252)
      ' Code page 932 represents Japanese characters.
      PrintCPBytes("Hello, World!", 932)
      
      ' Converts Japanese characters.
      PrintCPBytes("\u307b,\u308b,\u305a,\u3042,\u306d",1252)
      PrintCPBytes("\u307b,\u308b,\u305a,\u3042,\u306d",932)
   End Sub

   Public Shared Sub PrintCPBytes(str As String, codePage As Integer)
      Dim targetEncoding As Encoding
      Dim encodedChars() As Byte      
      
      ' Gets the encoding for the specified code page.
      targetEncoding = Encoding.GetEncoding(codePage)
      
      ' Gets the byte representation of the specified string.
      encodedChars = targetEncoding.GetBytes(str)
      
      ' Prints the bytes.
      Console.WriteLine("Byte representation of '{0}' in CP '{1}':", _
         str, codePage)
      Dim i As Integer
      For i = 0 To encodedChars.Length - 1
         Console.WriteLine("Byte {0}: {1}", i, encodedChars(i))
      Next i
   End Sub
End Class
using System;
using System.IO;
using System.Globalization;
using System.Text;

public class Encoding_UnicodeToCP
{
   public static void Main()
   {
      // Converts ASCII characters to bytes.
      // Displays the string's byte representation in the 
      // specified code page.
      // Code page 1252 represents Latin characters.
      PrintCPBytes("Hello, World!",1252);
      // Code page 932 represents Japanese characters.
      PrintCPBytes("Hello, World!",932);

      // Converts Japanese characters to bytes.
      PrintCPBytes("\u307b,\u308b,\u305a,\u3042,\u306d",1252);
      PrintCPBytes("\u307b,\u308b,\u305a,\u3042,\u306d",932);
   }

   public static void PrintCPBytes(string str, int codePage)
   {
      Encoding targetEncoding;
      byte[] encodedChars;

      // Gets the encoding for the specified code page.
      targetEncoding = Encoding.GetEncoding(codePage);

      // Gets the byte representation of the specified string.
      encodedChars = targetEncoding.GetBytes(str);

      // Prints the bytes.
      Console.WriteLine
               ("Byte representation of '{0}' in Code Page  '{1}':", str, 
                  codePage);
      for (int i = 0; i < encodedChars.Length; i++)
               Console.WriteLine("Byte {0}: {1}", i, encodedChars[i]);
   }
}
Observação:

Se você Use Esse código em um aplicativo de console, o Unicode especificado elementos de texto não sejam exibidos corretamente .O suporte para caracteres Unicode no ambiente do console varia dependendo da versão do sistema operacional Windows que está executando.

Você pode usar esses métodos em um aplicativo ASP.NET para determinar a codificação a ser usada para caracteres de resposta.O aplicativo deve conjunto o valor do ContentEncoding propriedade para o valor retornado pelo método apropriado. O exemplo de código a seguir ilustra como conjunto HttpResponse.ContentEncoding.

' Explicitly sets ContentEncoding to UTF-8.
Response.ContentEncoding = Encoding.UTF8

' Sets ContentEncoding using the name of an encoding.
Response.ContentEncoding = Encoding.GetEncoding(name)

' Sets ContentEncoding using a code page number.
Response.ContentEncoding = Encoding.GetEncoding(codepageNumber)
// Explicitly sets the encoding to UTF-8.
Response.ContentEncoding = Encoding.UTF8;

// Sets ContentEncoding using the name of an encoding.
Response.ContentEncoding = Encoding.GetEncoding(name);

// Sets ContentEncoding using a code page number.
Response.ContentEncoding = Encoding.GetEncoding(codepageNumber);

Para a maioria dos aplicativos ASP.NET, você deve fazer com que o ContentEncoding propriedade para o ContentEncoding propriedade para exibir texto na codificação que o usuário espera.

Para obter mais informações sobre como usar codificações no ASP.NET, consulte o exemplo de codificações múltiplos no QuickStart de tarefas comuns e a cultura de configuração e codificação Sample no ASP.NET QuickStart.

Consulte também

Conceitos

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

Unicode no .NET estrutura