Прочитать на английском

Поделиться через


Encoding.GetPreamble Метод

Определение

При переопределении в производном классе возвращает последовательность байтов, задающую используемую кодировку.

C#
public virtual byte[] GetPreamble();

Возвращаемое значение

Byte[]

Массив байтов, в котором содержится последовательность байтов, задающая используемую кодировку.

-или-

Массив байтов нулевой длины, если преамбула не требуется.

Примеры

В следующем примере определяется порядок байтов кодировки на основе преамбулы.

C#
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.

*/

Комментарии

При необходимости Encoding объект предоставляет преамбулу, которая представляет собой массив байтов, которые можно предварять на последовательность байтов, полученную в результате процесса кодирования. Если преамбула содержит метку порядка байтов (в Юникоде, кодовую точку U + FEFF), она помогает декодеру определить порядок байтов и формат преобразования или кодировку UTF.

Метка порядка байтов Юникода (BOM) сериализуется следующим образом (в шестнадцатеричном формате):

  • UTF-8: EF BB BF

  • Порядковый номер UTF-16 с обратным порядком байтов: FE FF

  • UTF-16, прямой порядок байтов: FF FE

  • UTF-32. обратный порядок байтов: 00 00 FE FF

  • UTF-32, прямой порядок байтов: FF FE 00 00

Следует использовать СПЕЦИФИКАЦИю, так как она обеспечивает почти определенную идентификацию кодировки для файлов, которые в противном случае теряют ссылку на Encoding объект, например, непомеченные или неправильно помеченные веб-данные или случайные текстовые файлы, которые хранятся в том случае, если у бизнеса нет международных проблем или других данных. Часто проблемы пользователей могут быть устранены, если данные постоянно и правильно помечены тегами, желательно в UTF-8 или UTF-16.

Для стандартов, предоставляющих тип кодировки, BOM является несколько избыточным. Однако его можно использовать, чтобы помочь серверу отправить правильный заголовок кодировки. Кроме того, его можно использовать в качестве резервного, если кодировка в противном случае будет потеряна.

Существует ряд недостатков использования спецификации. Например, знание того, как ограничить поля базы данных, использующие СПЕЦИФИКАЦИю, может оказаться затруднительным. Объединение файлов может быть проблемой, например, при слиянии файлов таким образом, что ненужный символ может оказаться в середине данных. Несмотря на множество недостатков, настоятельно рекомендуется использовать СПЕЦИФИКАЦИю.

Дополнительные сведения о порядке байтов и метке порядка байтов см. в стандарте Юникода на домашней странице Юникода.

Внимание!

Чтобы обеспечить правильную декодирование закодированных байтов, следует добавить в байты префикс в формате преамбулы. Однако большинство кодировок не предоставляют преамбулы. Чтобы обеспечить правильную декодирование закодированных байтов, следует использовать кодировку Юникода, то есть,, UTF8EncodingUnicodeEncoding или UTF32Encoding , с преамбулой.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0