Encoding.GetPreamble Método

Definición

Cuando se reemplaza en una clase derivada, devuelve una secuencia de bytes que especifica la codificación usada.

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()

Devoluciones

Byte[]

Matriz de bytes que contiene una secuencia de bytes que especifica la codificación utilizada.

O bien

Matriz de bytes de longitud cero, si no se requiere un preámbulo.

Ejemplos

En el ejemplo siguiente se determina el orden de bytes de la codificación en función del 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.
'

Comentarios

Opcionalmente, el Encoding objeto proporciona un preámbulo que es una matriz de bytes que se puede prefijar a la secuencia de bytes resultante del proceso de codificación. Si el preámbulo contiene una marca de orden de bytes (en Unicode, punto de código U+FEFF), ayuda al descodificador a determinar el orden de bytes y el formato de transformación o UTF.

La marca de orden de bytes Unicode (BOM) se serializa de la siguiente manera (en hexadecimal):

  • UTF-8: EF BB BF

  • Orden de bytes big endian UTF-16: FE FF

  • UTF-16 little endian byte order: FF FE

  • Orden de bytes de UTF-32 big endian: 00 00 FE FF

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

Debe usar la lista de materiales, ya que proporciona casi cierta identificación de una codificación para archivos que, de lo contrario, han perdido referencia al Encoding objeto, por ejemplo, datos web sin etiquetar o archivos de texto aleatorios etiquetados incorrectamente cuando una empresa no tenía problemas internacionales u otros datos. A menudo, es posible que se eviten problemas de usuario si los datos se etiquetan de forma coherente y correcta, preferiblemente en UTF-8 o UTF-16.

En el caso de los estándares que proporcionan un tipo de codificación, una boM es algo redundante. Sin embargo, se puede usar para ayudar a un servidor a enviar el encabezado de codificación correcto. Como alternativa, se puede usar como reserva en caso de que se pierda la codificación.

Hay algunas desventajas en el uso de una lista de materiales. Por ejemplo, saber cómo limitar los campos de base de datos que usan una lista de materiales puede ser difícil. La concatenación de archivos también puede ser un problema, por ejemplo, cuando los archivos se combinan de forma que un carácter innecesario pueda acabar en medio de los datos. Sin embargo, a pesar de las pocas desventajas, se recomienda encarecidamente el uso de una lista de materiales.

Para obtener más información sobre el orden de bytes y la marca de orden de bytes, vea El estándar Unicode en la página principal de Unicode.

Caution

Para asegurarse de que los bytes codificados están descodificados correctamente, debe prefijar los bytes codificados con un preámbulo. Sin embargo, la mayoría de las codificaciones no proporcionan un preámbulo. Para asegurarse de que los bytes codificados están descodificados correctamente, debe usar una codificación Unicode, es decir, UTF8Encoding, UnicodeEncodingo UTF32Encoding, con un preámbulo.

Se aplica a