UTF-16 — внутренняя кодировка Windows. Обычно её не видно, но некоторые программы сохраняют в ней файлы: Блокнот при выборе кодировки «Юникод», Excel при сохранении как «Текст в Юникоде», Редактор реестра при экспорте .reg-файлов, Windows PowerShell 5.1 при перенаправлении вывода в файл знаком >. Программы, которые ждут UTF-8 или однобайтовую кодировку, читают такие файлы неправильно.
H e l l o. В UTF-16 латинская буква занимает два байта, второй из которых нулевой (48 00 65 00 6C 00), и программа показывает этот ноль как пустой символ.ÿþ или яю. Это метка порядка байтов FF FE, прочитанная в однобайтовой кодировке.Копировать текст из UTF-16-файла в поле конвертера не нужно: при копировании редактор и так передаёт текст в Юникоде, а проблема только в байтах самого файла. Поэтому для UTF-16 подходит именно загрузка файла.
Файлы UTF-16 без метки порядка байтов встречаются редко, и распознать их автоматически нельзя. Откройте такой файл в Notepad++, выберите «Кодировки» → «UTF-16 LE» (или «UTF-16 BE») и сохраните его через «Преобразовать в UTF-8».
| Программа | Что сделать |
|---|---|
| Блокнот Windows | «Файл» → «Сохранить как», в списке «Кодировка» выбрать UTF-8. |
| Windows PowerShell 5.1 | Вместо команда > file.txt писать команда | Out-File file.txt -Encoding utf8. В PowerShell 7 вывод по умолчанию уже в UTF-8. |
| Linux и macOS | iconv -f UTF-16 -t UTF-8 input.txt > output.txt — порядок байтов iconv определит по метке. |