Encoding.GetPreamble Encoding.GetPreamble Encoding.GetPreamble Encoding.GetPreamble Method

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

El ejemplo siguiente determina el orden de bytes de la codificación según 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
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 formato Unicode, el punto de código U+FEFF), ayudará al descodificador a determinar el orden de 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 de UTF-16 big endian: FE FFUTF-16 big endian byte order: FE FF

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

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

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

Debe usar la marca BOM, ya que proporciona cierta identificación de una codificación para los archivos en caso contrario es han perdido la referencia a la Encoding objeto, por ejemplo, no etiquetado, o etiquetados incorrectamente datos web o archivos de texto aleatorio almacenados cuando una empresa no lo hizo tengan intereses 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. Problemas de los usuarios a menudo pueden evitarse si los datos es coherente y 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.

Los estándares que proporcionan un tipo de codificación, una marca BOM es redundante.For standards that provide an encoding type, a BOM is somewhat redundant. Sin embargo, se puede usar para ayudar a un servidor de 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 la codificación en caso contrario, se pierde.Alternatively, it can be used as a fallback in case the encoding is otherwise lost.

Existen algunas desventajas del uso de una marca BOM.There are some disadvantages to using a BOM. Por ejemplo, puede ser difícil saber cómo limitar los campos de la base de datos que usan una marca BOM.For example, knowing how to limit the database fields that use a BOM can be difficult. Concatenación de archivos también puede ser un problema, por ejemplo, cuando se mezclan los archivos de tal forma que un carácter innecesario puede acabar en el centro de 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. A pesar de la serie de desventajas, sin embargo, el uso de una lista de materiales se recomienda encarecidamente.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 el 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, se deben anteponer 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