Почему не отмечен знак байтового байта от 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.