Unicode BOM для UTF-16LE по сравнению с UTF32-LE

Кажется, что существует неоднозначность между Порядком байтов Marks, используемый для UTF16-LE и UTF-32LE. В частности, рассмотрите файл, который содержит следующие 8 байтов:

FF FE 00 00 00 00 00 00

Как может я говорить, содержит ли этот файл:

  1. UTF16-LE BOM (FE FF) сопровождаемый 3 нулевыми символами; или
  2. UTF32-LE BOM (FE FF 00 00) сопровождаемый одним нулевым символом?

Unicode BOM описан здесь: http://unicode.org/faq/utf_bom.html#bom4, но нет никакого обсуждения этой неоднозначности. Я пропускаю что-то?

8
задан tchrist 26 April 2015 в 20:49
поделиться

2 ответа

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

Удачный побочный эффект спецификации заключается в том, что вы также можете иногда ее использовать угадать кодировку, если вы ее не знаете, но это не то, для чего она была разработана, и она не может заменить отправку правильной информации о кодировке.

11
ответ дан 5 December 2019 в 07:58
поделиться

Однозначно. FF FE предназначен для UTF-16LE, а FF FE 00 00 обозначает UTF-32LE. Нет причин думать, что FF FE 00 00 , возможно, является UTF-16LE, потому что UTF были разработаны для текста, и пользователи не должны использовать символы NUL в своем тексте. В конце концов, когда вы в последний раз открывали шестнадцатеричный редактор и вставляли в текстовый документ несколько байтов 00? ^ _ ^

9
ответ дан 5 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: