Encoding.GetPreamble Método

Definição

Quando sobrescrito numa classe derivada, devolve uma sequência de bytes que especifica a codificação utilizada.

public:
 virtual cli::array <System::Byte> ^ GetPreamble();
public virtual byte[] GetPreamble();
abstract member GetPreamble : unit -> byte[]
override this.GetPreamble : unit -> byte[]
Public Overridable Function GetPreamble () As Byte()

Devoluções

Byte[]

Um array de bytes contendo uma sequência de bytes que especifica a codificação utilizada.

-ou-

Um array de bytes de comprimento zero, se não for necessário um preâmbulo.

Exemplos

O exemplo seguinte determina a ordem dos bytes da codificação com base no preâmbulo.

using System;
using System.Text;

namespace GetPreambleExample
{
   class GetPreambleExampleClass
   {
      static void Main()
      {
         Encoding unicode = Encoding.Unicode;

         // Get the preamble for the Unicode encoder. 
         // In this case the preamble contains the byte order mark (BOM).
         byte[] preamble = unicode.GetPreamble();

         // Make sure a preamble was returned 
         // and is large enough to contain a BOM.
         if(preamble.Length >= 2)
         {
            if(preamble[0] == 0xFE && preamble[1] == 0xFF)
            {
               Console.WriteLine("The Unicode encoder is encoding in big-endian order.");
            }
            else if(preamble[0] == 0xFF && preamble[1] == 0xFE)
            {
               Console.WriteLine("The Unicode encoder is encoding in little-endian order.");
            }
         }
      }
   }
}

/*
This code produces the following output.

The Unicode encoder is encoding in little-endian order.

*/
Imports System.Text

Namespace GetPreambleExample
   Class GetPreambleExampleClass
      Shared Sub Main()
         Dim [unicode] As Encoding = Encoding.Unicode

         ' Get the preamble for the Unicode encoder. 
         ' In this case the preamble contains the byte order mark (BOM).
         Dim preamble As Byte() = [unicode].GetPreamble()

         ' Make sure a preamble was returned 
         ' and is large enough to contain a BOM.
         If preamble.Length >= 2 Then
            If preamble(0) = &HFE And preamble(1) = &HFF Then
               Console.WriteLine("The Unicode encoder is encoding in big-endian order.")
            Else
               If preamble(0) = &HFF And preamble(1) = &HFE Then
                  Console.WriteLine("The Unicode encoder is encoding in little-endian order.")
               End If
            End If
         End If
      End Sub
   End Class
End Namespace

'This code produces the following output.
'
'The Unicode encoder is encoding in little-endian order.
'

Observações

Opcionalmente, o Encoding objeto fornece um preâmbulo que é um array de bytes que pode ser prefixado à sequência de bytes resultante do processo de codificação. Se o preâmbulo contiver uma marca de ordem de bytes (em Unicode, ponto de código U+FEFF), ajuda o descodificador a determinar a ordem dos bytes e o formato de transformação ou UTF.

A marca de ordem dos bytes Unicode (BOM) é serializada da seguinte forma (em hexadecimal):

  • UTF-8: EF BB BF

  • Ordem dos bytes big endian do UTF-16: FE FF

  • UTF-16 little endian ordem de bytes: FF FE

  • UTF-32 big endian ordem dos bytes: 00 00 FE FF

  • UTF-32 little endian ordem de bytes: FF FE 00 00

Deve usar a lista de materiais (BOM), pois fornece uma identificação quase certa de uma codificação para ficheiros que, de outra forma, perderam a referência ao Encoding objeto, por exemplo, dados web não etiquetados ou incorretamente marcados ou ficheiros de texto aleatórios armazenados quando uma empresa não tinha preocupações internacionais ou outros dados. Muitas vezes, problemas do utilizador podem ser evitados se os dados forem etiquetados de forma consistente e adequada, preferencialmente em UTF-8 ou UTF-16.

Para normas que fornecem um tipo de codificação, uma BOM é algo redundante. No entanto, pode ser usado para ajudar um servidor a enviar o cabeçalho de codificação correto. Alternativamente, pode ser usado como plano B caso a codificação se perca.

Existem algumas desvantagens em usar uma lista de materiais (BOM). Por exemplo, saber como limitar os campos da base de dados que utilizam uma lista de materiais pode ser difícil. A concatenação de ficheiros também pode ser um problema, por exemplo, quando os ficheiros são fundidos de tal forma que um carácter desnecessário pode acabar no meio dos dados. Apesar das poucas desvantagens, a utilização de uma lista de materiais é altamente recomendada.

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.

Atenção

Para garantir que os bytes codificados são decodificados corretamente, deve colocar um preâmbulo nos bytes codificados com prefixo. No entanto, a maioria das codificações não fornece um preâmbulo. Para garantir que os bytes codificados são decodificados corretamente, deve usar uma codificação Unicode, ou seja, UTF8Encoding, UnicodeEncoding, ou UTF32Encoding, com um preâmbulo.

Aplica-se a