Untertitel zeigen falsche Zeichen? Kodierung reparieren
Untertitel mit falschen Zeichen wie é, þ, � oder ??? haben ein Kodierungsproblem. Finde die Codepage, wandle in UTF-8 um oder stelle den Player ein.
Untertitel zeigen falsche Zeichen, wenn der Player die Datei in der falschen Zeichenkodierung liest. Grüße statt Grüße, Rauten, Fragezeichen: Jedes Muster verweist auf eine bestimmte Ursache. Die Lösung ist fast immer dieselbe: Wandle die Datei in UTF-8 um oder sage dem Player, welche alte Codepage die Datei nutzt.
Hier erfährst du, wie du den verfälschten Text deutest, in welcher Codepage deine Datei vermutlich steckt, drei Wege zur Reparatur unter Windows und Mac, warum Kästchen ein anderes Problem sind und wie du es künftig vermeidest.
Warum zeigen Untertitel falsche Zeichen?
Eine .srt-Datei ist reiner Text, und reiner Text verrät nicht, in welcher Kodierung er gespeichert wurde. Der Player muss raten. Er probiert UTF-8, die Kodierung, die alle Schriftsysteme fasst, und fällt auf einen Standard zurück, wenn die Bytes kein gültiges UTF-8 sind, meist auf die alte Windows-Codepage des Rechners, auf dem er läuft.
Diese alten Codepages sind die Wurzel des Problems. Bevor UTF-8 zum Normalfall wurde, speicherte Windows Text in einer Codepage pro Region: Windows-1252 für Westeuropa, 1254 für Türkisch, 1251 für Kyrillisch, 949 für Koreanisch, 932 für Japanisch. Jede verwendet dieselben Byte-Werte für andere Buchstaben. Das Byte, das in einer türkischen Datei ş bedeutet, bedeutet in einer westlichen þ.
Microsofts eigene Referenz zu Codepages benennt das Problem klar: Diese Codepages „can be different on different computers, or can be changed for a single computer, leading to data corruption“ (können sich von Rechner zu Rechner unterscheiden oder auf einem einzelnen Rechner geändert werden und so zu Datenverlust führen), und empfiehlt stattdessen UTF-8. Ein Untertitel, der vor Jahren auf einem türkischen oder koreanischen PC entstand und heute auf einem englischen Laptop läuft, ist genau dieser Fall.
Der Text selbst steckt meist noch in der Datei. Nur das Lesen ist falsch, deshalb geht die Reparatur schnell, sobald du die echte Codepage der Datei kennst.
Was der verfälschte Text verrät
Jedes Symptom hat seine eigene Ursache. Diese Beispiele stammen aus echten Dateien, die wir kodiert und absichtlich falsch geöffnet haben:
| Das siehst du | Was passiert ist | Lösung |
|---|---|---|
Déjà vu, ç, ö (zwei Symbole für einen Buchstaben) | Eine UTF-8-Datei wurde als Windows-1252 gelesen | Stelle den Player auf UTF-8 oder speichere die Datei als UTF-8 mit BOM |
Þu iþi çýðlýk, Ïðèâåò, Za¿ó³æ (falsche Buchstaben) | Eine Datei in türkischer, russischer oder polnischer Codepage wurde als Westeuropäisch gelesen | Aus der echten Codepage in UTF-8 umwandeln |
� Rauten oder �ȳ��ϼ��� | Eine Datei in alter Codepage wurde als UTF-8 gelesen | Aus der echten Codepage in UTF-8 umwandeln |
??? statt der Buchstaben | Die Buchstaben wurden gelöscht, als jemand den Text in einer Codepage ohne sie gespeichert hat | Die Originaldatei neu besorgen; keine Umwandlung stellt sie wieder her |
| Leere Kästchen, der Rest stimmt | Der Schriftart fehlen die Glyphen für dieses Schriftsystem; der Text ist in Ordnung | Die Schriftart wechseln |
Die ersten beiden Zeilen sind die häufigen, und sie sind Gegenstücke. In der ersten ist die Datei schon korrekt und der Player liegt falsch. In der zweiten und dritten liegt die Datei in einer alten Codepage, also bricht sie in jedem Player, der diese Codepage nicht errät. Einmal in UTF-8 umgewandelt, ist sie in allen Playern zugleich repariert.
In welcher Codepage steckt deine Untertiteldatei?
Das verrät dir die Sprache der Untertitel. Eine Datei, die nicht UTF-8 ist, steckt fast immer in der alten Windows-Codepage ihrer Sprache:
| Untertitelsprache | Alte Windows-Codepage | Name für FFmpeg |
|---|---|---|
| Englisch, Französisch, Deutsch, Spanisch, Portugiesisch, Italienisch | 1252 | CP1252 |
| Polnisch, Tschechisch, Ungarisch | 1250 | CP1250 |
| Russisch, Ukrainisch, Bulgarisch | 1251 | CP1251 |
| Griechisch | 1253 | CP1253 |
| Türkisch | 1254 | CP1254 |
| Arabisch | 1256 | CP1256 |
| Japanisch | 932 (Shift-JIS) | CP932 |
| Koreanisch | 949 | CP949 |
| Chinesisch, vereinfacht | 936 (GB2312) | GB18030 |
| Chinesisch, traditionell | 950 (Big5) | CP950 |
GB18030 ist die Obermenge der Codepage für vereinfachtes Chinesisch und liest deshalb auch Dateien, die als GBK oder GB2312 gespeichert wurden.
Um herauszufinden, was du hast, öffne die Datei im Windows-Editor (Notepad): Die Statusleiste nennt die Kodierung, und „ANSI“ steht für eine alte Codepage. Auf dem Mac oder in Git Bash unter Windows führst du diesen Befehl aus:
file --mime-encoding subtitles.srt
utf-8 oder us-ascii heißt: Die Datei ist in Ordnung, der Player ist schuld. iso-8859-1 oder unknown-8bit steht für eine alte Codepage. Das Tool kann nicht sagen, welche, also richte dich nach der Sprache in der Tabelle.
Drei Wege, die Untertitelkodierung zu reparieren
- Die Datei in einem Texteditor als UTF-8 neu speichern. Kostenlos und schnell für eine einzelne Datei.
- Mit FFmpeg umwandeln. Ein Befehl, jede Codepage, Windows, Mac und Linux.
- Dem Player oder Encoder die Kodierung nennen. Keine neue Datei, aber die Lösung gilt nur in diesem einen Programm.
Die ersten beiden liefern eine UTF-8-Datei, die überall richtig läuft. Der dritte ist ein Notbehelf für ein Programm auf einem Rechner.
Methode 1: Die Untertiteldatei in Notepad oder TextEdit als UTF-8 speichern
Unter Windows öffnest du die .srt im Editor (Notepad). Ist eine Datei kein gültiges UTF-8, liest Notepad sie in der Codepage deines Windows-Systems. Das klappt, wenn die Datei zu deinem System passt: Eine türkische Datei öffnet sich auf einem türkischen Windows korrekt. Sieht der Text richtig aus, wähle Datei → Speichern unter, stelle Codierung auf UTF-8 und speichere unter einem neuen Namen. Sieht der Text auch in Notepad falsch aus, ist die Codepage deines Systems nicht die der Datei, dann nimm Methode 2.
Auf dem Mac lässt dich TextEdit die Kodierung beim Öffnen der Datei wählen. Apples Anleitung zu Zeichen, die nicht richtig angezeigt werden, beschreibt die Schritte: Klicke im Öffnen-Dialog auf Show Options (Optionen einblenden) und wähle dann im Menü Plain Text Encoding (Kodierung für reinen Text) eine Kodierung. Nimm die zur Untertitelsprache passende, prüfe, ob der Text richtig aussieht, und speichere dann eine Kopie als UTF-8. Den Standard fürs Speichern findest du unter TextEdit → Settings → Open and Save (Einstellungen → Öffnen und Sichern) bei Plain Text File Encoding.
Zwei Grenzen: Es geht nur eine Datei nach der anderen, und es funktioniert nur, wenn der Text nach dem Öffnen richtig aussieht. Speichere niemals eine Datei, die noch verfälscht aussieht: Du würdest die falschen Buchstaben dauerhaft in UTF-8 schreiben.
Methode 2: Untertitel mit FFmpeg in UTF-8 umwandeln
FFmpeg liest eine Untertiteldatei in jeder Codepage, die du mit -sub_charenc nennst, was die FFmpeg-Dokumentation mit „Set the input subtitles character encoding“ (Zeichenkodierung der Eingabe-Untertitel festlegen) beschreibt, und schreibt die Ausgabe als UTF-8. Nimm die Zeile für deine Sprache. Wir haben jede davon an Testdateien ausgeführt:
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 muss vor -i stehen. Lässt du es weg, bricht FFmpeg mit dieser Fehlermeldung ab, an der du auch erkennst, dass eine Datei kein UTF-8 ist:
Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc option
Zeigt die Ausgabe immer noch falsche Buchstaben, war der Tipp falsch. Probiere die benachbarte Codepage aus der Tabelle. Eine kyrillische Datei, gelesen als CP1251, kann nie als Türkisch herauskommen, ein falscher Tipp fällt also sofort auf.
Derselbe Befehl funktioniert unter Windows, Mac und Linux, und FFmpeg ist kostenlos.
Methode 3: Die Kodierung in VLC, HandBrake oder beim FFmpeg-Einbrennen festlegen
Willst du keine neue Datei anlegen, sag dem Programm, das sie liest, Bescheid.
VLC. Die Seite zur Untertitelkodierung im VideoLAN-Wiki nennt den Weg: Tools → Preferences, dann Subtitles / OSD → Default encoding. Wähle die Codepage, klicke auf Save und starte VLC neu. Das hilft bei der zweiten und dritten Zeile der Symptomtabelle. Es ändert VLC nur auf diesem Rechner: Dieselbe Datei bleibt auf einem Fernseher, einem Smartphone oder einem Medienserver kaputt.
HandBrake. Beim Import einer SRT im Tab Subtitles sagt die Dokumentation von HandBrake, du sollst „make sure the correct character code is selected from the 'Char Code' dropdown“ (sicherstellen, dass im Dropdown „Char Code“ die richtige Zeichenkodierung gewählt ist). Eine falsche Wahl „will result in your output file having no subtitle track“ (führt dazu, dass die Ausgabedatei keine Untertitelspur hat).
FFmpeg-Einbrennen. Der Filter subtitles hat eine eigene Option charenc, du kannst also eine Datei in alter Codepage direkt ins Bild einbrennen:
ffmpeg -i video.mp4 -vf "subtitles=turkish.srt:charenc=CP1254" -c:a copy output.mp4
Auf dem Mac hat das Standard-ffmpeg von Homebrew kein libass und meldet, dass der Filter subtitles nicht existiert; installiere ffmpeg-full und starte dessen Binärdatei über $(brew --prefix ffmpeg-full)/bin/ffmpeg. Die übrigen Optionen zum Einbrennen stehen in unserer Anleitung, wie du Untertitel ins Video einbrennst.
Untertitel zeigen Kästchen statt Buchstaben: ein Schriftproblem, kein Kodierungsproblem
Kästchen bedeuten, dass der Text richtig gelesen wurde und der Schriftart ein Glyph zum Zeichnen fehlt. Die Datei umzuwandeln ändert daran nichts.
Wie sich das zeigt, hängt vom Renderer ab. Wir haben eine koreanische Untertitelzeile in Impact, einer reinen Latein-Schrift, mit FFmpeg unter Windows eingebrannt: libass zeichnete Komma und Punkt in Impact und holte das Hangul aus einer anderen installierten Schrift. Keine Kästchen, aber ein gemischtes Bild, das du so nicht gewählt hast. Kästchen entstehen, wenn keine Schriftart auf dem Rechner das Schriftsystem abdeckt, was auf Servern und in Playern mit kleinem eingebautem Schriftsatz vorkommt.
Die Lösung ist, eine Schriftart zu nennen, die die Sprache abdeckt. Bei einem FFmpeg-Einbrennen geht das mit force_style:
ffmpeg -i video.mp4 -vf "subtitles=korean-utf8.srt:force_style='FontName=Malgun Gothic'" -c:a copy output.mp4
Welche Systemschrift unter Windows und Mac welches Schriftsystem abdeckt, steht in unserem Leitfaden zu Untertitel-Schriften.
So handhabt Sablate Untertitelkodierung und Schriften
Sablate schreibt jeden Untertitelexport, .srt, .vtt, .txt und .ass, als UTF-8. Eine Transkription beginnt in Unicode, also gelangt nie eine Codepage in die Datei, und derselbe Export wird auf Koreanisch, Türkisch oder Arabisch richtig gelesen.
Schriften werden pro Sprache behandelt. Jede Übersetzungsebene hat ihren eigenen Stil, und wenn die gewählte Untertitelschrift das Schriftsystem nicht zeichnen kann, setzt Sablate eine Schrift ein, die mit dem System ausgeliefert wird: Malgun Gothic unter Windows und Apple SD Gothic Neo auf dem Mac für Koreanisch, Yu Gothic UI und Hiragino Sans für Japanisch, Microsoft YaHei und PingFang SC für vereinfachtes Chinesisch. Die Vorschau nutzt dieselbe Schrift wie das Einbrennen, du prüfst also, was später gerendert wird.
Eine ehrliche Grenze: Der .srt- und .vtt-Import von Sablate liest Dateien als UTF-8 und erkennt keine alten Codepages. Wandle eine alte Datei mit Methode 1 oder Methode 2 um, bevor du sie importierst. Die Funktionsübersicht listet den Rest des Editors und der Exporte auf.
| Liest alte Codepages | Was du bekommst | Plattformen | Preis | |
|---|---|---|---|---|
| Notepad | Nur die Codepage deines Systems | Eine UTF-8-Kopie der Datei | Windows | Kostenlos |
| TextEdit | Ja, beim Öffnen gewählt | Eine UTF-8-Kopie der Datei | Mac | Kostenlos |
| FFmpeg | Ja, jede, mit -sub_charenc oder charenc | Eine UTF-8-Kopie oder ein Video mit eingebrannten Untertiteln | Windows, Mac und Linux | Kostenlos |
| VLC | Ja, mit Default encoding | Richtige Wiedergabe auf diesem Rechner | Windows, Mac und Linux | Kostenlos |
| HandBrake | Ja, mit Char Code beim SRT-Import | Ein Video mit den Untertiteln darin | Windows, Mac und Linux | Kostenlos |
| Sablate | Nein, importiert nur UTF-8 | UTF-8-Exporte und eine Einbrenn-Schrift pro Sprache | Windows und Mac | Free-Tarif; Pro $29 einmalig oder $5.99 im Monat |
Zum Reparieren einer vorhandenen Datei gewinnen die kostenlosen Tools: FFmpeg und TextEdit lesen jede alte Codepage, Sablate nicht. Sablate passt, wenn du Untertitel erstellst, besonders in mehreren Sprachen, und Dateien willst, die diese Reparatur nie brauchen.
Welche Lösung passt zu dir?
„Eine Datei sieht im VLC auf meinem eigenen Rechner falsch aus.“ Ändere Default encoding im VLC oder wandle die Datei einmal um und denk nicht mehr daran.
„Die Untertitel müssen auf einem Fernseher, einem Smartphone, in Plex oder auf YouTube laufen.“ Wandle mit Methode 1 oder 2 in UTF-8 um. Andere Geräte teilen deine VLC-Einstellungen nicht, und auf der YouTube-Seite zu Untertiteldateien steht, eine SRT „must be in plain UTF-8“ (müsse in reinem UTF-8 vorliegen).
„Ich sehe é und ö.“ Die Datei ist schon UTF-8. Repariere den Player oder speichere in Notepad eine Kopie als UTF-8 mit BOM, damit die Datei ihre Kodierung selbst anzeigt.
„Ich brenne die Untertitel ein.“ Nutze charenc im FFmpeg-Befehl oder wandle vorher um, und prüfe dann die Schrift für die Sprache.
„Ich sehe Fragezeichen.“ Hör auf umzuwandeln und such die Originaldatei. Die Buchstaben stecken nicht mehr in dieser Datei.
So gehen Untertitel nicht wieder kaputt
Speichere jede Untertiteldatei als UTF-8. In Notepad ist das die Auswahl bei Codierung in „Speichern unter“; meide ANSI. Stelle auf dem Mac die Speicherkodierung von TextEdit einmal auf UTF-8.
Wandle um, bevor du bearbeitest. Wer eine verfälschte Datei bearbeitet und dann umwandelt, mischt zwei Kodierungen in einer Datei, und das Ergebnis ist viel schwerer zu reparieren.
Behalte das Original, bis die umgewandelte Kopie dort richtig angezeigt wird, wo sie tatsächlich läuft: auf dem Fernseher, im Medienserver, auf der Website. Liest ein älteres Gerät UTF-8 trotzdem falsch, löst eine als UTF-8 mit BOM gespeicherte Kopie das meist, weil das BOM die Datei für Programme als UTF-8 kennzeichnet, die sonst raten würden.
Wenn du Untertitel von Grund auf erstellst, gehört die Kodierung zum richtigen Ergebnis. So erstellst du eine SRT-Datei behandelt die Fallen im Speichern-Dialog unter Windows und Mac.
Wenn du Untertitel erzeugst, statt alte zu reparieren, starte in einem Tool, das UTF-8 schreibt und die Schrift pro Sprache für dich wählt. Lade Sablate für Windows oder Mac herunter und exportiere deine erste Datei in einer der 100 Transkriptionssprachen.
Häufig gestellte Fragen
Warum zeigen meine Untertitel falsche Zeichen?
Weil der Player die Datei in der falschen Zeichenkodierung gelesen hat. Eine Untertiteldatei verrät nicht, welche Kodierung sie nutzt, also rät der Player, und ein falscher Tipp macht aus Umlauten oder nicht lateinischen Buchstaben Symbole. Wandle die Datei in UTF-8 um oder sage dem Player, in welcher Codepage sie gespeichert wurde, dann sind die Buchstaben wieder da.
Wie wandle ich eine Untertiteldatei in UTF-8 um?
Öffne sie in einem Texteditor, der sie richtig liest, und speichere eine Kopie als UTF-8. Oder starte FFmpeg mit der alten Codepage der Datei, etwa ffmpeg -sub_charenc CP1254 -i input.srt output.srt für Türkisch. FFmpeg schreibt die neue Datei als UTF-8. Prüfe das Ergebnis im Player, bevor du das Original löschst.
Wie ändere ich die Untertitelkodierung im VLC?
Öffne Tools, dann Preferences, dann Subtitles / OSD und wähle in der Liste Default encoding die Codepage der Datei. Klicke auf Save und starte VLC neu, damit die Änderung greift. Die Einstellung repariert nur die Wiedergabe in VLC auf diesem Rechner. Wandle die Datei in UTF-8 um, wenn sie auch auf einem Fernseher, einem Smartphone oder einer Website laufen soll.
Warum zeigen Untertitel Fragezeichen statt Buchstaben?
Weil die Buchstaben verloren gingen, als der Text in einer Kodierung gespeichert wurde, die dafür keinen Platz hat. Ein koreanischer oder russischer Untertitel, der als westeuropäischer Text gespeichert wird, enthält für jeden Buchstaben, den er nicht fassen kann, ein Fragezeichen. Keine Umwandlung holt sie zurück, du brauchst die Originaldatei oder einen neuen Export aus der Quelle.
Was bedeutet Invalid UTF-8 in decoded subtitles text in FFmpeg?
FFmpeg hat eine UTF-8-Untertiteldatei erwartet und Bytes einer älteren Codepage gefunden. Die Fehlermeldung nennt die Lösung gleich mit: Setze -sub_charenc mit der Kodierung der Datei vor -i, etwa CP1251 für Russisch oder CP949 für Koreanisch. Beim Einbrennen der Datei nutzt du stattdessen die Option charenc des Filters subtitles.
Welche Kodierung sollten Untertiteldateien haben?
UTF-8. Es fasst alle Schriftsysteme in einer Kodierung zusammen, sodass dieselbe Datei in jeder Sprache auf jedem Gerät richtig gelesen wird. YouTube verlangt SRT-Dateien in reinem UTF-8, und Player, Fernseher und Medienserver lesen es deutlich zuverlässiger als eine alte Windows-Codepage. Liest ein älteres Gerät eine UTF-8-Datei trotzdem falsch, speichere sie als UTF-8 mit BOM.