Я столкнулся с той же проблемой, что и Эдвард. Я согласен с Дастином, обычно в текстовых файлах нельзя использовать нулевые символы.
Однако я создал файл, который содержит все символы Юникода. Сначала я использовал кодировку utf-32le, затем кодировку utf-32be, кодировку utf-16le и utf-16be, а также кодировку utf-8.
При попытке перекодировать файлы в utf-8, я хотел сравнить результат с уже существующим файлом utf-8. Поскольку первый символ в моих файлах после BOM - это нулевой символ, я не смог успешно определить файл с помощью utf-16le BOM, он обнаружился как utf-32le BOM, потому что байты выглядели точно так, как описал Эдвард. Первый символ после FOM FOME - 0000, но обнаружение BOM обнаружило BOM FFFE0000 и, таким образом, обнаружило utf-32le вместо utf-16le, в результате чего мой первый 0000-символ был украден и взят как часть спецификации.
Таким образом, никогда не следует использовать нулевой символ в качестве первого символа файла, закодированного с прямым порядком байтов utf-16, потому что это сделает спецификации UTF-16le и utf-32le неоднозначными.
Чтобы решить мою проблему, я поменяю местами первый и второй символ. : -)