Конвертер кодировок текста

Перевести файл из UTF-16 в UTF-8

UTF-16 — внутренняя кодировка Windows. Обычно её не видно, но некоторые программы сохраняют в ней файлы: Блокнот при выборе кодировки «Юникод», Excel при сохранении как «Текст в Юникоде», Редактор реестра при экспорте .reg-файлов, Windows PowerShell 5.1 при перенаправлении вывода в файл знаком >. Программы, которые ждут UTF-8 или однобайтовую кодировку, читают такие файлы неправильно.

Признаки файла в UTF-16

  • Между латинскими буквами видны пробелы или точки: H e l l o. В UTF-16 латинская буква занимает два байта, второй из которых нулевой (48 00 65 00 6C 00), и программа показывает этот ноль как пустой символ.
  • В начале файла стоят символы ÿþ или яю. Это метка порядка байтов FF FE, прочитанная в однобайтовой кодировке.
  • Поиск по тексту ничего не находит, а Git считает файл двоичным.

Как перевести файл в UTF-8

  1. Нажмите «Загрузить файл» и выберите файл. Конвертер находит UTF-16 по метке порядка байтов в начале файла и сразу показывает нормальный текст.
  2. Выберите кодировку файла UTF-8 (уже выбрана на этой странице) или «UTF-8 с BOM (для Excel)», если файл будут открывать в Excel, и нажмите «Скачать файл в этой кодировке».

Копировать текст из 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 и macOSiconv -f UTF-16 -t UTF-8 input.txt > output.txt — порядок байтов iconv определит по метке.

Частые вопросы

Чем UTF-16 LE отличается от UTF-16 BE?
Порядком байтов внутри каждого двухбайтового символа. В LE (little-endian) младший байт идёт первым — так записывает Windows; в BE (big-endian) — наоборот. Метка в начале файла показывает порядок: FF FE означает LE, FE FF — BE.
Что будет с символами при переводе из UTF-16 в UTF-8?
Ничего не потеряется: обе кодировки представляют весь Юникод, включая эмодзи и иероглифы. Меняется только способ записи байтов, а для текста на латинице файл станет примерно вдвое меньше.