Encoding.GetPreamble Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Cuando se reemplaza en una clase derivada, devuelve una secuencia de bytes que especifica la codificación 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()
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 basándose en el preámbulo.
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. 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.
La marca de orden de bytes Unicode (BOM) se serializa como se indica a continuación (en hexadecimal):
UTF-8: EF BB BF
Orden de bytes UTF-16 big endian: FE FF
Orden de bytes UTF-16 little endian: FF FE
UTF-32 big endian el orden de bytes: 00 00 FE FF
UTF-32 little endian el orden de bytes: 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. A menudo se pueden evitar problemas de usuario si los datos están correctamente etiquetados, 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, de lo contrario, se pierda la codificación.
El uso de una marca BOM tiene algunas desventajas. Por ejemplo, saber cómo limitar los campos de base de datos que usan una marca BOM puede ser difícil. 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. Sin embargo, a pesar de los pocos inconvenientes, se recomienda encarecidamente el uso de una marca BOM.
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.
Precaución
Para asegurarse de que los bytes codificados se descodifican 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 se descodifican correctamente, debe usar una codificación Unicode, es decir, UTF8Encoding , UnicodeEncoding o UTF32Encoding , con un preámbulo.