Heute hab ich ein paar Untertitel in die Finger bekommen, bei denen das Character Encoding unbekannt war und das gefixed werden musste. Die Screenshots sind von Totem, da VLC nach der Korrektur weiterhin nur Müll als Text angezeigt hat.
Movie.Chs.srt Movie.Cht.srt Movie.Eng.srt Movie.mkv
file *.srt
Movie.Chs.srt: Non-ISO extended-ASCII text, with CRLF line terminators Movie.Cht.srt: ISO-8859 text, with CRLF line terminators Movie.Eng.srt: ASCII text, with CRLF line terminators
file --mime-encoding *.srt
Movie.Chs.srt: unknown-8bit Movie.Cht.srt: iso-8859-1 Movie.Eng.srt: us-ascii
Da die englischen Untertitel korrekt angezeigt werden und UTF-8 abwärtskompatibel zu ASCII ist, betrachten wir nur die beiden anderen Untertitel. ISO-8859-1 für Movie.Cht.srt kann eigentlich nicht stimmen, da dieser soweit ich weiß, keine asiatischen Zeichen darstellen kann. Aber probieren wir es einfach mal, denn beim Thema Encoding ist oft Raten angesagt.
iconv -f ISO-8859-1 -t UTF-8 Movie.Chs.srt > Movie.Chs.utf8.srt
Hm, sieht genauso scheisse aus. Das war eher eine Verschlimmbesserung. file erzählt mir hier glaub was vom Pferd[*]...
Mal sehen, was uchardet bzw. chardet so meint. ( enca war keine große Hilfe )
# uchardet unterstützt kein Globbing ( *.srt ) for subtitle in *.srt ; do echo -n "$subtitle " ; uchardet "$subtitle" ; done
Movie.Chs.srt gb18030 Movie.Cht.srt Big5 Movie.Eng.srt ascii/unknown
chardet *.srt
Movie.Chs.srt: GB2312 (confidence: 0.99) Movie.Cht.srt: Big5 (confidence: 0.99) Movie.Eng.srt: ascii (confidence: 1.00)
Aha, GB 18030 bzw. GB2312 und Big5 klingt schon vielversprechender.
iconv -f GB2312 -t UTF-8 Movie.Chs.srt > Movie.Chs.UTF8.srt
iconv: illegal input sequence at position 10003
Ok, der erste Schuss ging daneben.
iconv -f GB18030 -t UTF-8 Movie.Chs.srt > Movie.Chs.UTF8.srt
Sieht gut aus. Keine Fehlermeldung.
iconv -f BIG-5 -t UTF-8 Movie.Cht.srt > Movie.Cht.UTF8.srt
Ebenfalls keine Fehlermeldung. Mal sehen, was Totem jetzt dazu meint.
Das sieht doch gut aus. Man könnte meinen, dass die Untertitel identisch sind, schaut man aber mal genauer mit Meld hin, sieht man, dass sich die Texte manchmal gleichen, manchmal aber nicht. Muss daran liegen, dass sich viele asiatische Sprachen gegenseitig Zeichen aus deren Schriften entleihen.
Man kann natürlich, sobald man das Encoding herausgefunden hat, einfach im Videoplayer das entsprechende Encoding für den jeweiligen Untertitel auswählen, aber da UTF-8 der de-facto Standard ist, bevorzuge ich die Konvertierung...
[*] http://superuser.com/questions/301552/how-to-auto-detect-text-file-encoding
file only detects encodings with specific properties, such as UTF-8 or UTF-16. The rest -- oldish ISO8859 or their MS-DOS and Windows correspondents -- are listed as "unknown-8bit" or something similar, even for files which chardet detects with 99% confidence.