Кажется, что существует неоднозначность между Порядком байтов Marks, используемый для UTF16-LE и UTF-32LE. В частности, рассмотрите файл, который содержит следующие 8 байтов:
FF FE 00 00 00 00 00 00
Как может я говорить, содержит ли этот файл:
Unicode BOM описан здесь: http://unicode.org/faq/utf_bom.html#bom4, но нет никакого обсуждения этой неоднозначности. Я пропускаю что-то?
Как следует из названия, в спецификации указывается только порядок байтов , но не кодировка. Вы должны знать, что такое кодировка в первую очередь, затем вы можете использовать спецификацию, чтобы определить, являются ли младшие или самые важные байты первыми для многобайтовых последовательностей.
Удачный побочный эффект спецификации заключается в том, что вы также можете иногда ее использовать угадать кодировку, если вы ее не знаете, но это не то, для чего она была разработана, и она не может заменить отправку правильной информации о кодировке.
Однозначно. FF FE
предназначен для UTF-16LE, а FF FE 00 00
обозначает UTF-32LE. Нет причин думать, что FF FE 00 00
, возможно, является UTF-16LE, потому что UTF были разработаны для текста, и пользователи не должны использовать символы NUL в своем тексте. В конце концов, когда вы в последний раз открывали шестнадцатеричный редактор и вставляли в текстовый документ несколько байтов 00? ^ _ ^