Свеженаписанная статейка, которую хотел выложить на анимевики, но он очередной раз не редактируется. Посему выкладываю тут - авось кому пригодится.
Итак, вы решили посмотреть фильм с субтитрами, а вместо русских слов на экране отображаются кракозябры вида: Никак забыть РЅРµ РјРѕРіСѓ, СЃ момента встречи нашей.
это конечно печально, но вполне решаемо.
Возможные причины:
1) Файл субтитров в уникодной кодировке не имеет кодовой последовательности BOM в начале файла.
2) Если речь идёт о субтитрах *.ass и *.ssa то возможно в стилях оформления не установлен код языка.
3) Субтитлер используемый вами при воспроизведении не поддерживает уникод.
4) (Очень редко) Кодировка субтитров отличается от win-1251(стандартная для windows) и не уникод (правда кракозябры будут несколько иного вида).
Рассмотрим варианты решения для перечисленных случаев.
1) Отсутствие байтовой последовательности BOM.
Начну с объяснения почему используется уникод и что же это за BOM такой.
Дело в том, что понятие "уникод" не подразумевает конкретную кодировку конкретного языка, как напимер русские win1251, koi8-r или dos866. Это набор стандартов кодирования символов, отличающийся от трёх перечисленных тем, что в нём наличествуют символы большинства языков земли. То есть в уникоде для каждого символа каждого языка есть свой уникальный номер и в какой стране не открыли-бы файл он будет выглядеть одинаково, и это-же позволяет использовать в файле субтитров несколько языков одновременно. В субтитрах к аниме зачастую это используется для опенингов и ендингов, где совмещаются японские иероглифы и русские буквы. Уникодные кодировки могут иметь фиксированное число байт на один символ (UTF-16 - 2 байта, UTF-32 - 4байта) или переменное (UTF-8 - от 1 до 6 байт). Также может отличаться очерёдность байт (прямая и инверсная для разновидностей UTF-16 и UTF-32). Чтобы указать программе просмотра какая из разновидностей уникода используется, в самом начале файла записывается последовательность из 3 байт которая и называется ВОМ. По стандарту уникода байтовая последовательность не является обязательной и потому может отсутствовать, но часто программы её воспринимают как признак того, уникодный это файл или нет, как и в случае с некоторыми субтитлерами.
Решается эта проблема в Windows 2000 и всех последующих, как правило, просто - открытием и сохранением файла субтитров в программе "Блокнот", которая всегда прописывает BOM. Подробнее: откройте файл "блокнотом", просмотрите файл на предмет читабельных русских фраз - если русские фразы читаются, то заходим в меню "Файл" > "Сохранить как...". В открывшемся диалоге сохранения файла надо обратить внимание на 2 поля: "Кодировка" и "Тип файла". В поле "Кодировка" выберите UTF-8 (она из уникодов наиболее компактная), а в поле "Тип файла" - "Все файлы", чтобы сохраняемый файл не сменил расширение на txt. Далее нажимаем "Сохранить" и проверяем результат наших усилий.
2) Установка кода языка в стилях субтитров ass и ssa
Иногда причиной нечитабельности субтитров бывает некорректно заполненный параметр кода языка в стилях субтитров.
Проверяется и решается эта проблема всё в той-же программе "Блокнот". Открываем ей файл субтитров и ищем в нём секцию описания стилей, начинающейся с "шапки" [V4+ Styles] для субтитров ass и [V4 Styles] для субтитров ssa.
Например:
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Sun,Georgia,55,&H00CEE6FF,&H00FFFFFF,&H00004C99,&H3200214B,0,-1,0,0,100,100,0,0,1,2.5,1,2,20,20,15,0
Style: Silver,Georgia,55,&H00E9FFFC,&H00FFFFFF,&H007A7B79,&H327A7B79,0,-1,0,0,100,100,0,0,1,2.5,2,2,20,20,15,0
Style: Reclame,Georgia,40,&H0ADDDBDA,&H00FFFFFF,&H00E27B4B,&H32E27B4B,0,-1,0,0,100,100,0,0,1,1.5,2,2,20,20,15,204
Style: ED,Georgia,46,&H0ADDDBDA,&H00FFFFFF,&H00823E12,&H32823E12,0,-1,0,0,100,100,0,0,1,1.5,1,2,20,20,15,204
Для обоих форматов субтитров после "шапки" идёт строка "Format: ...." с перечислением очерёдности следования параметров описания стиля, разделяемых запятой. Как видно из примера, последним стоит параметр Encoding - он то нас и интересует. Для обычной латиницы этот параметр равен 0, как в первых двух строках примера, а вот для русского языка он должен иметь код 204 как в последних двух строках. Так что исправляем 0 на 204, сохраняем результаты своих трудов, как в предыдущем пункте и проверяем что получилось. Правда строго говоря, возможны варианты многоязычных субтитров и прежде чем менять все нули на 204 следует всё-же убедиться, что фразы стиля с данным именем написаны по-русски.(так, для справки если что.... для японского вроде должно быть 128)
3) Что делать если субтитлер вообще не поддерживает уникодные субтитры
Лучшим выбором станет конечно сменить субтитлер, но это не всегда возможно.
В этом случае сперва необходимо посмотреть присутствуют-ли в файле субтитров текст или отдельные символы на языках отличных от английского и русского (например японские иероглифы). Если таких символов нет то можно сохранить файл в стандартной кодировке windows win-1251. Для этого повторяем действия первого пункта, с той лишь разницей, что в поле "Кодировка" выставляем ANSI. В случае с наличием таких символов придётся либо смириться с их потерей, либо менять субтитлер.
4) Субтитры имеют кодировку отличную от win-1251 и уникода.
Крайне редко встречаются русские субтитры с кодировками dos-866 и Koi8-r. Тут решение только одно - искать редактор, понимающий эти кодировки и позволяющий сохранять в кодировке windows, или специализированную утилиту перекодировки текстов. Wordpad кодировку dos-866 вроде понимает, только называется у него этот формат "Текст MS-DOS", листер файлового менеджера Total Commander тоже понимает кодировку dos - можно перевести его в режим отображения в кодировке dos, чтоб текст стал читабельным, выделить всё, скопировать в буфер и вставить в блокнот, с последующим сохранением в файл, как описано выше.