Испанские субтитры и юникод
Для тех, кто изучает испанский язык по фильмам и сериалам, наверное знакома ситуация, когда субтитры доступны в формате ANSI, при этом на системе с русским языком они отображаются некорректно:
Попробовал найти штатный перекодировщик в SubtitleWorkshop и еще нескольких подобных программах, но в итоге решил перевести в нормальный вид самостоятельно, используя только Python. В итоге все прилично:
Собственно, код:
# -*- coding: utf-8 -*-
import os
import codecs
import re
path = os.getcwd()
dirs = os.listdir(path)
srclist = ['ї','б','н','й','Ў','у','ъ']
replist = ['¿','á','í','é','¡','ó','ú']
repldict = dict(zip(srclist,replist))
map(lambda x: unicode(x,'utf-8').encode('utf-8'), replist)
for sfile in dirs:
if not '.srt' in sfile:
continue
with codecs.open(sfile, 'r', 'windows-1251') as f:
newarray = []
for line in f:
newline = line.encode('utf-8')
for sym in srclist:
sym = sym.decode('utf-8').encode('utf-8')
if sym in line.encode('utf-8'):
newline = re.sub(sym,replist[srclist.index(sym)].decode('utf-8').encode('utf-8'),newline)
newarray.append(newline.decode('utf-8'))
f.close()
with codecs.open(sfile + '.srt', 'w', 'utf-8') as l:
l.writelines(newarray)
l.close()
raw_input("Press Enter to exit")
В список srclist добавляются все литералы, требующие замены, а в replist соответствующие им заменяющие литералы. Скрипт ищет в текущей с ним директории все файлы *.srt и обрабатывает их, потом создает новый файл рядом со старым в формате UTF-8. Вот такой велосипед.

