Почему не указывается порядок следования байтов из UTF8Encoding.GetBytes? - PullRequest
13 голосов
/ 07 января 2009

Фрагмент говорит сам за себя: -)

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's up?

Ответы [ 4 ]

18 голосов
/ 07 января 2009

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

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

8 голосов
/ 07 января 2009

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

UTF8Encoding enc = new UTF8Encoding(true);
byte[] data = enc.GetBytes("a");
byte[] combo = enc.GetPreamble().Concat(data).ToArray();
3 голосов
/ 07 января 2009

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

byte[] preamble = enc.GetPreamble();

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

2 голосов
/ 09 января 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...