SWick

Sysadmin-by-Nature

Encoding von Text Untertiteln fixen
3rd November 2012

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.

Ausgangslage

Movie.Chs.srt
Movie.Cht.srt
Movie.Eng.srt
Movie.mkv

Versuch 1

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[*]...

Versuch 2

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.

Mission accomplished... FIXED !

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.
Tags: encoding, subtitle.

"People said I should accept the world. Bullshit! I don't accept the world." -- Stallman