Почему не отмечен знак байтового байта от UTF8Encoding.GetBytes?

В отрывке говорится все: -)

UTF8Encoding enc = new UTF8Encoding(true/*include Byte Order Mark*/);
byte[] data = enc.GetBytes("a");
// data has length 1.
// I expected the BOM to be included. What up?

Ответы

Ответ 1

Вы бы не хотели, чтобы он использовался для каждого вызова GetBytes, иначе у вас не было бы способа (например) записать файл по очереди за раз.

Выставляя его GetPreamble, вызывающие могут вставить преамбулу только в соответствующую точку (то есть в начале своих данных). Я согласен с тем, что документация может быть намного понятнее.

Ответ 2

Спасибо вам обоим. Следующие работы, и LINQ делает комбинацию простой: -)

UTF8Encoding enc = new UTF8Encoding(true);
byte[] data = enc.GetBytes("a");
byte[] combo = enc.GetPreamble().Concat(data).ToArray();

Ответ 3

Поскольку ожидается, что GetBytes() будет называться много раз... вам нужно использовать:

byte[] preamble = enc.GetPreamble();

(вызовите его только в начале последовательности) и напишите это; это где находится спецификация.

Ответ 4

Обратите внимание, что в общем случае вам не нужен знак байтового байта для UTF-8. Основная цель состоит в том, чтобы разделить UTF16 BE и UTF16 LE на части. Нет такой вещи, как UTF8 LE и UTF8 BE.