Free tool

Convert SRT to UTF-8: Fix Garbled Subtitle Characters

To convert an SRT to UTF-8 you first need to know what it really is. Drop the file in and switch the encoding until the preview reads correctly; the text is then decoded with your choice and saved as UTF-8, with an optional byte order mark. Text damaged by a double conversion, with é where é should be, can be repaired in the same step, all inside your browser.

01 — Your file

Choose a subtitle file

02 — Preview

How the text reads

Choose a file to preview the result. Everything runs in this tab.

How to convert an SRT to UTF-8

  1. Drop the subtitle file into the box. SRT is the usual case, but VTT, ASS, SSA, SBV, TTML, DFXP, XML, SUB, LRC, CSV, TSV and TXT files work too, up to 20 MB. The file card shows the size and the detected encoding.
  2. Read the preview under "How the text reads". It shows the first 1,200 characters as they decode right now.
  3. If the letters look wrong, open "The file is really in" and pick the encoding for the subtitle's language. The preview changes as soon as you choose.
  4. Leave "Also repair é / ’ damage" ticked. It only changes the text when the repair makes it cleaner.
  5. Tick "Add a BOM (helps some older TVs)" only if the device you play on needs it; see below.
  6. Press "Save as UTF-8 and download". The file keeps its extension and gets -utf8 added to its name, for example episode1-utf8.srt.

Why subtitles turn into gibberish

A subtitle file is a list of bytes, and an encoding is the table that turns bytes into letters. Before UTF-8 became the norm, each region used its own table, and an SRT has no header saying which one was used. The player guesses, and when it guesses wrong the same bytes come out as different letters. The byte 0xC7, for example, is Ç in Western European Windows-1252, З in Cyrillic Windows-1251, Η in Greek Windows-1253 and ا in Arabic Windows-1256.

Here is how three common files look when read with the wrong table, and what the right choice gives:

Arabic file read as Western European
ãÑÍÈÇ becomes مرحبا after choosing Arabic (Windows-1256)
Russian file read as Western European
Ïðèâåò becomes Привет after choosing Cyrillic (Windows-1251)
UTF-8 file saved again as Western European
Ça va ? Un café. becomes Ça va ? Un café. with the repair box ticked

The first two are a wrong reading of intact bytes, so picking the right encoding fixes them. The third is real damage written into the file, which needs the repair described further down.

What the detector can tell, and what it can't

  • A byte order mark at the start identifies UTF-8, UTF-16 LE or UTF-16 BE with certainty.
  • Lots of zero bytes in every other position means UTF-16 without a mark, and the tool picks the matching byte order.
  • Text that is valid UTF-8 is read as UTF-8. If it is also plain English with no accents, there is nothing to convert: those files are identical in UTF-8 and the old Western encodings.
  • Anything else is shown as Windows-1252 to start with. The legacy tables overlap so much that the bytes alone can't say which one was used, so you choose by eye. Below the preview, a hint says when the text still looks garbled.

Which encoding to try for each language

Spanish, French, German, Italian, Portuguese, Dutch, Scandinavian
Windows-1252, or ISO-8859-15
Polish, Czech, Slovak, Hungarian, Croatian, Romanian
Central European Windows-1250, or ISO-8859-2
Russian, Ukrainian, Bulgarian, Serbian Cyrillic
Windows-1251; very old Russian files may be KOI8-R
Turkish
Windows-1254, or ISO-8859-9
Greek
Windows-1253
Hebrew
Windows-1255
Arabic and Persian
Windows-1256, or ISO-8859-6
Vietnamese
Windows-1258
Thai
Windows-874
Japanese
Shift_JIS, or EUC-JP
Korean
EUC-KR (also covers CP949)
Chinese, simplified
GB18030, which also reads GBK and GB2312 files
Chinese, traditional
Big5

Decoding is done by your browser's built-in text decoder, which follows the web's Encoding Standard. One consequence: that standard treats the label ISO-8859-1 as Windows-1252, so those two options give the same preview. For Japanese files, the Japanese guide to subtitle mojibake walks through the Shift_JIS case in detail.

Repairing é damage: double encoding

Sometimes a UTF-8 file was opened in a program that read it as Windows-1252 and then saved it again. Every accented letter, stored as two bytes in UTF-8, has now become two separate characters, so é turns into é, an apostrophe ’ into ’, and Russian Привет into Привет. The file is valid UTF-8, just with the wrong characters in it, so choosing another encoding can't help.

The repair reverses one round of that damage: it maps each character back to the Windows-1252 byte it came from and reads those bytes as UTF-8 again. It keeps the result only when it contains fewer telltale pairs and replacement marks than before. Two cases stay as they are: a file that mixes damaged and clean lines, because a clean accented letter can't be mapped back, and the second layer of a file that was damaged twice.

What is kept and what changes

  • Everything in the file stays: numbering, timecodes, italic tags, ASS styles and line breaks. The tool doesn't parse or re-time anything; it only rewrites the same text in UTF-8.
  • A byte order mark already in the file is dropped and only added back if you tick the box.
  • Letters that were replaced by plain question marks when someone saved the file in the wrong encoding are gone for good. If black-diamond replacement marks show under every encoding, the original letters were lost the same way.

Should the file have a BOM?

UTF-8 doesn't need a byte order mark, and many players never look for one. Some Windows programs, older TVs and media players use it to recognise UTF-8 and fall back to a regional encoding without it, while a few strict parsers show it as stray characters before the first subtitle. Save without it first; if your TV still shows garbled accents with the UTF-8 file, save again with the box ticked.

Problems an encoding change won't fix

Limits

  • One file at a time, up to 20 MB.
  • Only UTF-8 and UTF-16 are detected automatically; legacy encodings are picked by you.
  • The list has 23 encodings. Baltic Windows-1257, KOI8-U and ISO-2022-JP aren't in it.
  • The output is always UTF-8; it can't save back into a legacy encoding.
  • It changes how the text is stored, never the language. It doesn't translate.

Next steps

Other subtitle tools on this site read any non-UTF-8 file as Windows-1252 and point you here, so convert first. Then clean the file with the SDH remover, retime it with the subtitle frame rate converter, or open it with your video in the free subtitle editor to check the lines on screen and export SRT, VTT or an MP4 with the subtitles burned in.

More free tools

Turn the file into text

Frequently asked questions

How do I know which encoding my subtitle file uses?

Unless it is UTF-8 or UTF-16, the file doesn't record it. Start with the encoding listed for the subtitle's language and keep the one where the preview reads naturally.

Why do ISO-8859-1 and Windows-1252 show exactly the same text?

Browsers follow the Encoding Standard, which decodes the ISO-8859-1 label with the Windows-1252 table. Windows-1252 is a superset for printable text, so nothing is lost either way.

Will saving as UTF-8 change my timings or formatting?

No. The text is rewritten byte for byte in UTF-8 and nothing is parsed, so numbering, timecodes, tags and ASS styles stay exactly as they were.

Can I fix é text in a file that is already UTF-8?

Yes. Leave the detected UTF-8 selected and keep the repair box ticked; the preview shows the repaired text if the damage can be reversed.

Can the tool save a file back to Windows-1256 or another old encoding?

No. It always saves UTF-8, which current players, editors and upload forms read.

My Lithuanian or Latvian subtitles still look wrong. Why?

Baltic Windows-1257 isn't one of the 23 encodings offered. A desktop text editor that lets you reopen a file in a chosen encoding and save it as UTF-8 can handle those files.