字 AI-SRTSub

How to repair mojibake subtitles

A subtitle file full of garbage characters is rarely corrupted — it was just read with the wrong encoding. The repair tool detects the original encoding and puts the right characters back, leaving index numbers and timings alone.

Updated 2026-10-17Tool guides

What this tool does

The same bytes read as UTF-8 and read as GBK produce two completely different sets of characters — the file is not damaged, it was decoded with the wrong encoding. Here is what the repair tool does:

  • Works out which encoding the file was written in and re-reads the characters correctly
  • Tells you exactly how the text broke: replacement characters, control characters, currency symbols, runs of accented letters, walls of obscure characters
  • Ranks repair candidates by which one reads most like real language, then you pick one and save
  • When your player cannot detect the encoding, saves a copy as UTF-8 with BOM or as GBK for it

Upload the file, don't paste it

The two entry points can repair different amounts of damage, so upload the file if you can. With a file, the original bytes are still there: the tool tries one encoding after another, and once it recognises GBK it decodes as GBK — nothing has to be guessed. Text that arrives by paste is no longer raw bytes. By the time the browser hands over the string, the mistake has already happened, so the tool can only work backwards and take what it can get.

If pasted text already contains the replacement character (that boxed question mark `�`), the original bytes are long gone and nothing can bring them back. The page says so outright: go back up and use "Choose file" to upload the original.

Repair page upload area: drop zone and paste box, with the detected encoding shown above
Drag the file in or browse for it; the paste box sits below and can repair much less

What the diagnosis is telling you

Once you upload, the diagnosis card gives a verdict. No mojibake found: the content reads fine as it is; if your player still shows garbage, the player used the wrong encoding — go down to "Save as", pick a different one and hand it that file. When it looks like mojibake, the card lists which trace it found:

  • It contains replacement characters — the original bytes are already lost
  • Control characters have crept in
  • It is sprinkled with currency and mathematical symbols
  • Accented letters appear in clumps — as if UTF-8 had been read one byte at a time (`ä½ å¥½` is that type)
  • Runs of CJK characters with not one common character among them — as if UTF-8 had been read as GBK
Diagnosis card: verdict plus each mojibake trace listed line by line
Diagnosis lists traces by type instead of just saying "it's mojibake"

How candidates are ranked, and how to choose

Under "Ways to fix this", candidates are listed in most-like-real-language-first order, up to 12 of them, each labelled with the pair of encodings it was read from and to. Click one to see how it looks, pick it, then scroll down to save. Not happy? Use "Keep as is" to fall back to the original.

The order comes from a score: share of common characters, strings of accents, strings of symbols, walls of obscure characters, all weighted in. If no score is clearly better, nothing is recommended — it will not push a half-plausible candidate at you just to have one. Text that was mangled twice (saved wrong once, then repaired wrong once) gets one extra round of back-solving on the top candidates, so anything within two layers can still be rescued.

Candidate repair list ranked by how much it reads like real language, each labelled with its encoding pair
Candidates ranked by "most like real language", each showing the encodings involved

Saving correctly is the last step

A repaired result still has to be saved correctly. When a player cannot detect UTF-8, saving as UTF-8 with BOM (Windows players rely on the BOM) or as GBK usually settles it. You can save as UTF-8, UTF-8 (with BOM), GBK, Big5, Shift_JIS or EUC-KR; if something does not fit, you are told to pick another (GBK cannot hold Korean). Downloaded files get `-fixed` added to the name.

When the detected encoding is not UTF-8, "Save as" is already preset to UTF-8 with BOM for you. Once you touch the dropdown yourself, it stops second-guessing you.

Result area: text box with save-as dropdown and download button
Pick an encoding, then download — the filename gets -fixed added

What never gets touched

Only the mis-read characters are replaced. Index numbers, timings and ASS style lines are not altered in any way.

FAQ

I uploaded the file, so why do I still have to save it again? The file itself is usually fine; what is broken is the player reading it with the wrong encoding. In that case no character in the text needs changing — just save a copy as UTF-8 with BOM or GBK and give that to the player.

Why can't pasted text be repaired? Once the replacement character shows up in pasted content, the original bytes are gone and there is nothing to reason backwards from. Go back up and use "Choose file" to upload the original.

The candidate I want isn't listed? Nothing is recommended unless it scores clearly better than what you already have. Try switching the detected encoding to another one and let it re-rank.

How many files at once? One at a time. Download the repair, then feed in the next file.

Privacy

Detection and repair run entirely in your browser. No subtitle content is ever sent to a server.

Related tools and guides

Where mojibake comes from and why it ends up looking like that — see Where subtitle mojibake comes from; the encoding is fine but the content is dirty — use Subtitle cleanup; to check timing and reading speed — Subtitle QC.

Runs entirely in your browser, nothing to install.

Open the mojibake repair tool

Related guides