Encoding.GetPreamble Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
При переопределении в производном классе возвращает последовательность байтов, указывающую используемую кодировку.
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()
Возвращаемое значение
Массив байтов, содержащий последовательность байтов, указывающий используемую кодировку.
–или–
Массив байтов нулевой длины, если не требуется преамбл.
Примеры
В следующем примере определяется порядок байтов кодирования на основе преамблирования.
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.
'
Комментарии
Encoding При необходимости объект предоставляет преамблирование, которое представляет собой массив байтов, который можно префиксировать в последовательность байтов, полученных из процесса кодирования. Если преамблирование содержит метку порядка байтов (в Юникоде, кодовая точка U+FEFF), она помогает декодировщику определить порядок байтов и формат преобразования или UTF.
Метка порядка байтов Юникода сериализуется следующим образом (в шестнадцатеричном формате):
UTF-8: EF BB BF
Порядок байтов большого байта UTF-16: FE FF
УTF-16 маленький байтовый порядок байтов: FF FE
Порядок байтов большого байта UTF-32: 00 00 FE FF
Маленький байтовый порядок байтов UTF-32: FF FE 00 00
Следует использовать BOM, так как он обеспечивает почти определенную идентификацию кодировки для файлов, которые в противном случае потеряли ссылку на Encoding объект, например без тегов или неправильно помеченных веб-данных или случайных текстовых файлов, хранящихся, когда у бизнеса нет международных проблем или других данных. Часто проблемы с пользователем могут избежать, если данные последовательно и правильно помечены, предпочтительно в UTF-8 или UTF-16.
Для стандартов, предоставляющих тип кодирования, BOM является несколько избыточным. Однако его можно использовать для отправки правильного заголовка кодировки на сервере. Кроме того, его можно использовать в качестве резервного варианта, если кодировка в противном случае потеряна.
Существует ряд недостатков использования BOM. Например, зная, как ограничить поля базы данных, использующие BOM, может быть сложной задачей. Объединение файлов может быть проблемой, например, когда файлы объединяются таким образом, что ненужный символ может оказаться в середине данных. Несмотря на некоторые недостатки, однако, использование BOM настоятельно рекомендуется.
Дополнительные сведения о порядке байтов и отметке порядка байтов см. в разделе "Стандартный юникод" на домашней странице юникода .
Предостережение
Чтобы убедиться, что кодированные байты декодированы должным образом, необходимо закодировать префикс байтов с префиксом. Однако большинство кодировок не предоставляют предварительной версии. Чтобы убедиться, что кодированные байты декодированы должным образом, следует использовать кодировку Юникода, тUTF8EncodingUnicodeEncoding. е. или UTF32Encodingс преамблированием.