Encoding.GetPreamble Método

Definición

Cuando se reemplaza en una clase derivada, devuelve una secuencia de bytes que especifica la codificación utilizada.When overridden in a derived class, returns a sequence of bytes that specifies the encoding used.

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.A byte array containing a sequence of bytes that specifies the encoding used.

o bien-or-

Matriz de bytes de longitud cero, si no se requiere un preámbulo.A byte array of length zero, if a preamble is not required.

Ejemplos

En el ejemplo siguiente se determina el orden de bytes de la codificación basándose en el preámbulo.The following example determines the byte order of the encoding based on the preamble.

using namespace System;
using namespace System::Text;
int main()
{
   Encoding^ unicode = Encoding::Unicode;
   
   // Get the preamble for the Unicode encoder. 
   // In this case the preamblecontains the Byte order mark (BOM).
   array<Byte>^preamble = unicode->GetPreamble();
   
   // Make sure a preamble was returned 
   // and is large enough to containa BOM.
   if ( preamble->Length >= 2 )
   {
      
      // if (preamble->Item[0] == 0xFE && preamble->Item[1] == 0xFF) 
      if ( preamble[ 0 ] == 0xFE && preamble[ 1 ] == 0xFF )
      {
         Console::WriteLine( "The Unicode encoder is encoding in big-endian order." );
      }
      // else if (preamble->Item[0] == 0xFF && preamble->Item[1] == 0xFE) 
      else
      
      // else if (preamble->Item[0] == 0xFF && preamble->Item[1] == 0xFE) 
      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.

*/
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 containa 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 anteponer a la secuencia de bytes resultante del proceso de codificación.Optionally, the Encoding object provides a preamble that is an array of bytes that can be prefixed to the sequence of bytes resulting from the encoding process. 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 los bytes y el formato de transformación o UTF.If the preamble contains a byte order mark (in Unicode, code point U+FEFF), it helps the decoder determine the byte order and the transformation format or UTF.

La marca de orden de bytes Unicode (BOM) se serializa como se indica a continuación (en hexadecimal):The Unicode byte order mark (BOM) is serialized as follows (in hexadecimal):

  • UTF-8: EF BB BFUTF-8: EF BB BF

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

  • Orden de bytes UTF-16 little endian: FF FEUTF-16 little endian byte order: FF FE

  • UTF-32 big endian el orden de bytes: 00 00 FE FFUTF-32 big endian byte order: 00 00 FE FF

  • UTF-32 little endian el orden de bytes: FF FE 00 00UTF-32 little endian byte order: FF FE 00 00

Debe usar la marca BOM, ya que proporciona casi cierta identificación de una codificación para los archivos que, de otro modo, han perdido una referencia al Encoding objeto, por ejemplo, datos Web no etiquetados o etiquetados incorrectamente o archivos de texto aleatorios almacenados cuando una empresa no tiene problemas internacionales u otros datos.You should use the BOM, because it provides nearly certain identification of an encoding for files that otherwise have lost reference to the Encoding object, for example, untagged or improperly tagged web data or random text files stored when a business did not have international concerns or other data. A menudo se pueden evitar problemas de usuario si los datos están correctamente etiquetados, preferiblemente en UTF-8 o UTF-16.Often user problems might be avoided if data is consistently and properly tagged, preferably in UTF-8 or UTF-16.

En el caso de los estándares que proporcionan un tipo de codificación, una BOM es algo redundante.For standards that provide an encoding type, a BOM is somewhat redundant. Sin embargo, se puede usar para ayudar a un servidor a enviar el encabezado de codificación correcto.However, it can be used to help a server send the correct encoding header. Como alternativa, se puede usar como reserva en caso de que, de lo contrario, se pierda la codificación.Alternatively, it can be used as a fallback in case the encoding is otherwise lost.

El uso de una marca BOM tiene algunas desventajas.There are some disadvantages to using a BOM. Por ejemplo, saber cómo limitar los campos de base de datos que usan una marca BOM puede ser difícil.For example, knowing how to limit the database fields that use a BOM can be difficult. La concatenación de archivos también puede ser un problema, por ejemplo, cuando los archivos se combinan de manera que un carácter innecesario puede acabar en el medio de los datos.Concatenation of files can be a problem also, for example, when files are merged in such a way that an unnecessary character can end up in the middle of data. Sin embargo, a pesar de los pocos inconvenientes, se recomienda encarecidamente el uso de una marca BOM.In spite of the few disadvantages, however, the use of a BOM is highly recommended.

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.For more information on byte order and the byte order mark, see The Unicode Standard at the Unicode home page.

Precaución

Para asegurarse de que los bytes codificados se descodifican correctamente, debe prefijar los bytes codificados con un preámbulo.To ensure that the encoded bytes are decoded properly, you should prefix encoded bytes with a preamble. Sin embargo, la mayoría de las codificaciones no proporcionan un preámbulo.However, most encodings do not provide a preamble. Para asegurarse de que los bytes codificados se descodifican correctamente, debe usar una codificación Unicode, es decir, UTF8Encoding , UnicodeEncoding o UTF32Encoding , con un preámbulo.To ensure that the encoded bytes are decoded properly, you should use a Unicode encoding, that is, UTF8Encoding, UnicodeEncoding, or UTF32Encoding, with a preamble.

Se aplica a