Назад к блогу

Кодировка субтитров: как исправить кракозябры

Кодировка субтитров сбита, если вместо букв é, þ, � или ???. Узнайте кодовую страницу файла и переведите его в UTF-8 в Блокноте, TextEdit или FFmpeg.

3 ноября 2026 г.
Sablate Team

Субтитры показывают странные символы, когда плеер читает файл в неверной кодировке. Привет вместо Привет, Ïðèâåò вместо Привет, ромбы, вопросительные знаки: у каждого признака своя причина. Исправление почти всегда одно и то же: перевести файл в UTF-8 или сообщить плееру, какую старую кодовую страницу использует файл.

Дальше — как читать искажённый текст, в какой кодовой странице, скорее всего, ваш файл, три способа исправить его в Windows и на Mac, почему квадраты — это другая проблема и как не допустить повторения.

Почему в субтитрах появляются странные символы?

Файл .srt — это обычный текст, а обычный текст не сообщает, в какой кодировке он сохранён. Плееру приходится угадывать. Сначала он пробует UTF-8, кодировку, которая вмещает любые письменности, а если байты не образуют корректный UTF-8, переключается на кодировку по умолчанию, обычно на старую кодовую страницу Windows того компьютера, где он запущен.

Корень проблемы — именно эти старые кодовые страницы. Пока UTF-8 не стал нормой, Windows хранила текст в своей кодовой странице для каждого региона: Windows-1252 для Западной Европы, 1254 для турецкого, 1251 для кириллицы, 949 для корейского, 932 для японского. В каждой одни и те же значения байтов означают разные буквы. Байт, который в турецком файле означает ş, в западноевропейском означает þ.

В собственном справочнике по кодовым страницам Microsoft прямо описывает эту проблему: такие кодовые страницы «могут отличаться на разных компьютерах или меняться на одном компьютере, что приводит к повреждению данных», и рекомендует вместо них UTF-8. Субтитры, сделанные много лет назад на турецком или корейском ПК и запущенные сегодня на английском ноутбуке, — именно такой случай.

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

Что подсказывает искажённый текст

У каждого симптома своя причина. Эти примеры взяты из настоящих файлов, которые мы закодировали и открыли неправильно:

Что вы видитеЧто произошлоКак исправить
Déjà vu, ç, ö (два символа вместо одной буквы)Файл в UTF-8 прочитан как Windows-1252Задайте в плеере UTF-8 или сохраните файл в UTF-8 with BOM
Þu iþi çýðlýk, Ïðèâåò, Za¿ó³æ (неверные буквы)Файл в турецкой, русской или польской кодовой странице прочитан как западноевропейскийПереведите файл из настоящей кодовой страницы в UTF-8
Ромбы � или �ȳ��ϼ���Файл в старой кодовой странице прочитан как UTF-8Переведите файл из настоящей кодовой страницы в UTF-8
??? на месте буквБуквы были удалены, когда кто-то сохранил текст в кодовой странице, где их нетПолучите исходный файл заново; никакая конвертация их не вернёт
Пустые квадраты, остальной текст верныйВ шрифте нет глифов для этой письменности; с текстом всё в порядкеСмените шрифт

Первые две строки встречаются чаще всего, и они противоположны друг другу. В первой файл уже правильный, а ошибся плеер. Во второй и третьей файл сохранён в старой кодовой странице, поэтому он ломается во всех плеерах, которые не угадали эту кодовую страницу. Достаточно один раз перевести его в UTF-8, и он исправится сразу во всех плеерах.

В какой кодовой странице ваш файл субтитров?

Подскажет язык субтитров. Файл не в UTF-8 почти всегда сохранён в старой кодовой странице Windows для своего языка:

Язык субтитровСтарая кодовая страница WindowsНазвание для FFmpeg
Английский, французский, немецкий, испанский, португальский, итальянский1252CP1252
Польский, чешский, венгерский1250CP1250
Русский, украинский, болгарский1251CP1251
Греческий1253CP1253
Турецкий1254CP1254
Арабский1256CP1256
Японский932 (Shift-JIS)CP932
Корейский949CP949
Китайский (упрощённый)936 (GB2312)GB18030
Китайский (традиционный)950 (Big5)CP950

GB18030 — надмножество кодовой страницы упрощённого китайского, поэтому он читает и файлы, сохранённые как GBK или GB2312.

Чтобы узнать, что у вас, откройте файл в Блокноте Windows: в строке состояния указана кодировка, а «ANSI» означает старую кодовую страницу. На Mac или в Git Bash на Windows выполните:

file --mime-encoding subtitles.srt

utf-8 или us-ascii означает, что с файлом всё в порядке, а виноват плеер. iso-8859-1 или unknown-8bit означает старую кодовую страницу. Какую именно, утилита определить не может, поэтому ориентируйтесь по языку из таблицы.

Три способа исправить кодировку субтитров

  1. Пересохранить файл в UTF-8 в текстовом редакторе. Бесплатно и быстро для одного файла.
  2. Преобразовать его в FFmpeg. Одна команда, любая кодовая страница, Windows, Mac и Linux.
  3. Сообщить кодировку плееру или кодировщику. Нового файла нет, но исправление действует только в этой одной программе.

Первые два способа дают файл в UTF-8, который правильно играет везде. Третий — обходной путь для одной программы на одном компьютере.

Способ 1: сохраните файл субтитров в UTF-8 в Блокноте или TextEdit

В Windows откройте .srt в Блокноте. Если файл не является корректным UTF-8, Блокнот читает его в системной кодовой странице Windows. Это работает, когда файл совпадает с вашей системой: турецкий файл в турецкой Windows откроется правильно. Если текст выглядит верно, выберите Файл → Сохранить как, в списке Кодировка выберите UTF-8 и сохраните под новым именем. Если в Блокноте текст тоже искажён, ваша системная кодовая страница не совпадает с файлом, поэтому используйте способ 2.

На Mac TextEdit позволяет выбрать кодировку при открытии файла. Руководство Apple о символах, которые отображаются неправильно, описывает шаги: в диалоге открытия нажмите Show Options (Показать параметры), затем выберите кодировку в меню Plain Text Encoding (Кодировка простого текста). Выберите кодировку для языка субтитров, убедитесь, что текст читается правильно, и сохраните копию в UTF-8. Кодировка для сохранения по умолчанию находится в TextEdit → Settings → Open and Save (Открытие и сохранение), в разделе Plain Text File Encoding (Кодировка файлов простого текста).

Два ограничения: файлы обрабатываются по одному, и способ работает, только если после открытия текст выглядит правильно. Никогда не сохраняйте файл, который всё ещё выглядит искажённым: вы навсегда запишете неверные буквы в UTF-8.

Способ 2: переведите субтитры в UTF-8 через FFmpeg

FFmpeg читает файл субтитров в любой названной вами кодовой странице через -sub_charenc, который документация FFmpeg описывает так: «Задаёт кодировку символов входных субтитров», — и записывает результат в UTF-8. Возьмите строку для вашего языка. Мы запускали каждую из них на тестовых файлах:

ffmpeg -sub_charenc CP1252 -i french.srt french-utf8.srt
ffmpeg -sub_charenc CP1250 -i polish.srt polish-utf8.srt
ffmpeg -sub_charenc CP1251 -i russian.srt russian-utf8.srt
ffmpeg -sub_charenc CP1253 -i greek.srt greek-utf8.srt
ffmpeg -sub_charenc CP1254 -i turkish.srt turkish-utf8.srt
ffmpeg -sub_charenc CP1256 -i arabic.srt arabic-utf8.srt
ffmpeg -sub_charenc CP932 -i japanese.srt japanese-utf8.srt
ffmpeg -sub_charenc CP949 -i korean.srt korean-utf8.srt
ffmpeg -sub_charenc GB18030 -i chinese.srt chinese-utf8.srt
ffmpeg -sub_charenc CP950 -i chinese-traditional.srt chinese-traditional-utf8.srt

-sub_charenc должен стоять перед -i. Если его пропустить, FFmpeg остановится с такой ошибкой, по которой заодно видно, что файл не в UTF-8:

Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc option

Если в результате всё ещё неверные буквы, значит, кодовая страница угадана неправильно. Попробуйте соседнюю из таблицы. Кириллический файл, прочитанный как CP1251, никогда не превратится в турецкий, поэтому ошибка видна с первого взгляда.

Та же команда работает в Windows, на Mac и в Linux, а FFmpeg бесплатен.

Способ 3: укажите кодировку в VLC, HandBrake или при вшивании через FFmpeg

Если вы не хотите создавать новый файл, сообщите кодировку программе, которая его читает.

VLC. На странице о кодировке субтитров в вики VideoLAN указан путь: Tools → Preferences, затем Subtitles / OSD → Default encoding. Выберите кодовую страницу, нажмите Save и перезапустите VLC. Это помогает в случаях из второй и третьей строк таблицы симптомов. Изменение действует только в VLC на этом компьютере: тот же файл по-прежнему сломается на телевизоре, телефоне или медиасервере.

HandBrake. При импорте SRT на вкладке Subtitles документация HandBrake советует «убедиться, что в раскрывающемся списке „Char Code“ выбрана правильная кодировка», и предупреждает, что неправильная «приведёт к тому, что в выходном файле не будет дорожки субтитров».

Вшивание через FFmpeg. У фильтра subtitles есть собственный параметр charenc, поэтому файл в старой кодовой странице можно вшить прямо в изображение:

ffmpeg -i video.mp4 -vf "subtitles=turkish.srt:charenc=CP1254" -c:a copy output.mp4

На Mac стандартный ffmpeg из Homebrew собран без libass и сообщает, что фильтра subtitles не существует; установите ffmpeg-full и запускайте его бинарный файл из $(brew --prefix ffmpeg-full)/bin/ffmpeg. Остальные способы вшить субтитры описаны в нашем руководстве по вшиванию субтитров в видео.

Вместо букв квадраты: проблема шрифта, а не кодировки

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

Как это проявляется, зависит от рендерера. Мы вшили в FFmpeg на Windows корейскую реплику со стилем Impact, шрифтом только с латиницей: libass нарисовал запятую и точку шрифтом Impact, а хангыль взял из другого установленного шрифта. Квадратов нет, но вид получился смешанным, и вы его не выбирали. Квадраты появляются, когда на машине нет ни одного шрифта, который покрывает эту письменность, — это бывает на серверах и в плеерах с небольшим встроенным набором шрифтов.

Исправление — указать шрифт, покрывающий нужный язык. В FFmpeg при вшивании для этого служит force_style:

ffmpeg -i video.mp4 -vf "subtitles=korean-utf8.srt:force_style='FontName=Malgun Gothic'" -c:a copy output.mp4

Какой системный шрифт покрывает какую письменность в Windows и на Mac, перечислено в нашем руководстве по шрифтам для субтитров.

Как Sablate работает с кодировкой и шрифтами субтитров

Sablate записывает каждый экспорт субтитров — .srt, .vtt, .txt и .ass — в UTF-8. Транскрипция с самого начала идёт в Unicode, поэтому никакая кодовая страница в файл не попадает, и один и тот же экспорт правильно читается на корейском, турецком или арабском.

Шрифты подбираются под каждый язык. У каждого слоя перевода свой стиль, и если выбранный вами шрифт субтитров не может нарисовать эту письменность, Sablate подставляет шрифт, который идёт в составе системы: Malgun Gothic в Windows и Apple SD Gothic Neo на Mac для корейского, Yu Gothic UI и Hiragino Sans для японского, Microsoft YaHei и PingFang SC для упрощённого китайского. В предпросмотре используется тот же шрифт, что и при вшивании, поэтому вы проверяете именно то, что будет отрисовано.

Одно честное ограничение: импорт .srt и .vtt в Sablate читает файлы только как UTF-8 и не определяет старые кодовые страницы. Прежде чем импортировать старый файл, переведите его способом 1 или способом 2. Остальные возможности редактора и экспорта перечислены в обзоре функций.

Читает старые кодовые страницыЧто вы получаетеПлатформыЦена
БлокнотТолько системную кодовую страницуКопию файла в UTF-8WindowsБесплатно
TextEditДа, выбирается при открытииКопию файла в UTF-8MacБесплатно
FFmpegДа, любые, через -sub_charenc или charencКопию в UTF-8 или видео с вшитыми субтитрамиWindows, Mac и LinuxБесплатно
VLCДа, через Default encodingПравильное воспроизведение на этом компьютереWindows, Mac и LinuxБесплатно
HandBrakeДа, через Char Code при импорте SRTВидео с субтитрами внутриWindows, Mac и LinuxБесплатно
SablateНет, импортирует только UTF-8Экспорт в UTF-8 и шрифт для вшивания под каждый языкWindows и MacБесплатный тариф; Pro — $29 единоразово или $5.99 в месяц

Для исправления готового файла бесплатные инструменты лучше: FFmpeg и TextEdit читают любую старую кодовую страницу, а Sablate нет. Sablate подходит, когда вы делаете субтитры, особенно на нескольких языках, и хотите получать файлы, которые никогда не потребуют такого исправления.

Какой способ выбрать?

«В VLC на моём компьютере один файл выглядит неправильно». Измените Default encoding в VLC или один раз переведите файл и забудьте об этом.

«Субтитры должны играть на телевизоре, телефоне, в Plex или на YouTube». Переведите файл в UTF-8 способом 1 или 2. Другие устройства не получат ваши настройки VLC, а страница YouTube о файлах субтитров требует, чтобы SRT был «в чистом UTF-8».

«Я вижу é и ö». Файл уже в UTF-8. Исправьте плеер или сохраните копию в UTF-8 with BOM в Блокноте, чтобы файл сам сообщал свою кодировку.

«Я вшиваю субтитры в видео». Используйте charenc в команде FFmpeg или сначала переведите файл, а затем проверьте шрифт для нужного языка.

«Я вижу вопросительные знаки». Прекратите преобразования и найдите исходный файл. В этом букв уже нет.

Как не допустить, чтобы субтитры сломались снова

Сохраняйте каждый файл субтитров в UTF-8. В Блокноте это выбор в списке «Кодировка» при сохранении; избегайте ANSI. На Mac один раз задайте UTF-8 как кодировку сохранения в TextEdit.

Преобразуйте до правки. Если править искажённый файл, а потом преобразовывать его, в одном файле смешаются две кодировки, и исправить результат будет гораздо труднее.

Храните оригинал, пока преобразованная копия не прочитается правильно там, где она будет играть: на телевизоре, в медиасервере, на сайте. Если старое устройство всё равно путает UTF-8, обычно помогает копия в UTF-8 with BOM: BOM помечает файл как UTF-8 для программ, которые иначе стали бы угадывать.

Когда вы делаете субтитры с нуля, кодировка — часть того, чтобы сделать их правильно. Статья Как создать SRT-файл разбирает ловушки диалога сохранения в Windows и на Mac.

Если вы создаёте субтитры, а не чините старые, начните с инструмента, который пишет UTF-8 и сам подбирает шрифт под язык. Скачайте Sablate для Windows или Mac и экспортируйте первый файл на любом из 100 языков транскрипции.

Часто задаваемые вопросы

Почему в моих субтитрах странные символы?

Потому что плеер прочитал файл в неверной кодировке. В файле субтитров не записано, в какой кодировке он сохранён, поэтому плеер угадывает, а при ошибке буквы с диакритикой и нелатинские буквы превращаются в странные символы. Переведите файл в UTF-8 или укажите плееру кодовую страницу, в которой он сохранён, и буквы вернутся.

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

Откройте файл в текстовом редакторе, который читает его правильно, и сохраните копию в UTF-8, либо запустите FFmpeg, указав старую кодовую страницу файла, например ffmpeg -sub_charenc CP1254 -i input.srt output.srt для турецкого. FFmpeg записывает новый файл в UTF-8. Прежде чем удалять оригинал, проверьте результат в своём плеере.

Как изменить кодировку субтитров в VLC?

Откройте Tools, затем Preferences, затем Subtitles / OSD и выберите кодовую страницу файла в списке Default encoding. Нажмите Save и перезапустите VLC, чтобы изменение вступило в силу. Настройка исправляет воспроизведение только в VLC на этом компьютере, поэтому если файл должен играть ещё и на телевизоре, телефоне или сайте, переведите его в UTF-8.

Почему вместо букв в субтитрах вопросительные знаки?

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

Что значит Invalid UTF-8 in decoded subtitles text в FFmpeg?

Это значит, что FFmpeg ожидал файл субтитров в UTF-8, а нашёл байты из старой кодовой страницы. Исправление подсказывает само сообщение FFmpeg: добавьте перед -i параметр -sub_charenc с кодировкой файла, например CP1251 для русского или CP949 для корейского, либо используйте параметр charenc фильтра subtitles, когда вшиваете файл в видео.

В какой кодировке должны быть файлы субтитров?

В UTF-8. Эта кодировка вмещает любые письменности, поэтому один и тот же файл правильно читается на любом языке и на любом устройстве. YouTube требует SRT-файлы в чистом UTF-8, а плееры, телевизоры и медиасерверы читают его гораздо надёжнее старой кодовой страницы Windows. Если старое устройство всё равно путает UTF-8, сохраните файл как UTF-8 with BOM.