← Cuelatch

Subtitles showing question marks or garbled characters

Your subtitle file is almost certainly fine. The bytes on disk are correct; they are just being read with the wrong character table. This is one of the most common subtitle problems and one of the easiest to fix, once you know what you are looking at.

Updated

Fix the encoding

What is going wrong

Text files do not record which encoding they use. A byte like0xCF means one letter in Windows-1251 and a different one in Windows-1252, and there is nothing in the file to say which was intended. Software has to guess, and it usually guesses UTF-8 because that is the modern default.

Subtitles, though, are frequently decades old, or produced by tools that still write regional code pages. When a Windows-1251 file is read as UTF-8, each byte that is not valid UTF-8 gets replaced or reinterpreted, and you get mojibake: question marks, black diamonds, or accented Latin letters standing in for Cyrillic.

Identify it from what you see

Looks likeShould beEncodingTypical language
приветприветWindows-1251Russian, Ukrainian, Bulgarian
é è ç üé è ç üWindows-1252French, Spanish, German
ż Ä… Å›ż ą śWindows-1250Polish, Czech, Hungarian
αβγαβγISO-8859-7Greek
ÅŸ ı Äžş ı ĞWindows-1254Turkish
??? or boxesCJK textBig5, GBK, Shift-JIS, EUC-KRChinese, Japanese, Korean

The pattern to recognise is two Latin characters where one non-Latin character belongs. That is UTF-8 decoding applied to single-byte text, and it tells you the file is a regional code page.

Plain ? or empty boxes usually mean the reverse: the text was converted at some point and the original characters were already lost, or the font in use has no glyph for them. If the characters are genuinely gone, no tool can bring them back and you need a different copy of the file.

Fixing it

Drop the file into Cuelatch. It checks for a byte order mark, tests whether the bytes are valid UTF-8, and if not, scores the plausible code pages against the actual byte distribution. It tells you what it found and lets you override the choice if the preview still looks wrong.

Any file you download is written as UTF-8, which every current player handles, so the problem does not come back.

Doing it by hand

Changing it in your player instead

Every player worth using can be told which encoding to assume, which gets the text readable in seconds. It is worth being clear about what this does and does not achieve: it changes how that one player reads the file. The bytes on disk do not change, so the problem returns on every other player, every other device, and anyone you send the file to.

In VLC, open Tools, then Preferences, then Subtitles/OSD, and change Subtitle text encoding from Default to the code page the file actually uses. On macOS the same setting sits under VLC, then Settings, then Subtitles. You may need to reload the subtitle track for it to take.

If subtitles are not appearing at all rather than appearing wrong, encoding is still worth ruling out: some players render nothing when decoding fails instead of showing mojibake, so a blank track and a garbled one can have the same cause. On Android that is worth checking againstMX Player subtitles not showing, where a storage permission is the more common culprit.

Do not save it with a BOM

Some editors add a byte order mark to UTF-8 files. Most players cope, but a few show a stray character on the first line or fail to parse the first cue. If your first subtitle misbehaves and the rest are fine, a BOM is the usual culprit. Cuelatch preserves whichever state the file arrived in rather than adding or stripping one behind your back.

If the text is right but the timing is not

Encoding and timing are unrelated problems. Once the characters read correctly, work throughthe timing diagnostic to sort out when the lines appear. If the lines are late or early specifically in VLC, VLC subtitles out of synccovers the delay controls and why the correction does not stick.

Common questions

Why do my subtitles show question marks or strange symbols?
The file is not UTF-8, and whatever opened it assumed it was. The bytes are fine; they are being read with the wrong character table. Reading the file with the correct encoding restores the text exactly.
How do I fix subtitles showing привет instead of Russian?
Cyrillic text reading as привет was saved as Windows-1251 and is being read as UTF-8. Open the file with Windows-1251 selected and save it back out as UTF-8.
Which encoding should I use?
The right subtitle encoding depends on the language of the text: Windows-1251 for Russian, Ukrainian, Bulgarian and Serbian Cyrillic; Windows-1252 for Western European; Windows-1250 for Polish, Czech and Hungarian; ISO-8859-7 for Greek; Windows-1254 for Turkish; Big5 or GBK for Chinese; Shift-JIS for Japanese; EUC-KR for Korean.
Why are my subtitles garbled in VLC?
VLC is reading the file with the wrong character table. Set Tools then Preferences then Subtitles/OSD, and change Subtitle text encoding from Default to the one the file actually uses. That fixes playback in VLC only; the file stays as it was, so it will still be garbled everywhere else.
My subtitles do not show at all. Is that an encoding problem?
Sometimes. A player that cannot decode the file may render nothing rather than show mojibake, so blank subtitles and garbled subtitles can have the same cause. Check that the file opens as readable text before assuming the track or the filename is at fault.
Is this a timing problem?
No. Encoding affects only the text. If the lines appear at the right moments but the characters are wrong, the timing is fine and only the encoding needs correcting.

Related

Cuelatch runs entirely in your browser. Subtitle and video files are never uploaded.