Skip to content

🛠 Mojibake Fixer

Automatically decodes garbled text by combining multiple encodings and suggests the most "natural Japanese" result. Batch-tests misreadings of Shift_JIS, UTF-8, EUC-JP, and ISO-2022-JP.

100% Free No signup Browser-only 5 languages Dark mode

🔒 About Privacy

📖 Where people get stuck

Try combinations of encodings against garbled text and find the one that reads back correctly. Everything runs in the browser. Whether it can be recovered depends on whether the information survived: text merely read with the wrong encoding can be reversed, but once it has been saved again in that state, the lost bytes are gone for good.

Case What happens What to do
It is all question marks and boxes This one is unrecoverable. A question mark is what remains after a character with no equivalent in the target encoding was collapsed into a replacement character; the original bytes are already gone. It happens converting rare kanji to Shift_JIS, or emoji to latin-1. By contrast, garbling that looks like it might be decipherable means the bytes are still there and can be reversed. Once it is a replacement character, the only route is to fetch the data again from source: a backup, the original email, a database replica — any path that did not go through the conversion. To stop it recurring, use UTF-8 end to end, which is the only reliable answer. On MySQL specify utf8mb4 and not utf8: the latter stops at three bytes and cannot store emoji or some kanji.
It has been double-encoded A pattern like ã‚りãŒã¨ã† is what you get when UTF-8 bytes were read as latin-1 and then saved as UTF-8 again. One character swells into two or three, and each further round adds another layer. It progresses one level deeper on every write when the database connection charset disagrees with the table charset. In this shape the bytes are intact, so it is recoverable — peel the layers off, trying until it reads correctly. But the thing to fix is the configuration, not the data: repair the rows without changing the write path and they are back the next day. Align the connection charset (SET NAMES utf8mb4), the table and column charsets, and the internal encoding of the application first, and only then repair the data.
Only the CSV comes out garbled CSV has nowhere to declare its encoding. HTML has <meta charset> and XML has a declaration line, but a CSV is data all the way down. The receiving software has to guess, and Excel on a Japanese Windows opens a file without a BOM as Shift_JIS. The file is correct; the garbling happens on the reader side. Export files destined for Excel as UTF-8 with BOM; with the BOM present Excel commits to UTF-8. But a BOM gets in the way when a program reads the file — the first column name picks up an invisible character and the key stops matching. Producing separate files for humans opening them in Excel and for systems reading them causes the fewest arguments. More on this on the CSV and JSON converter.

When you find garbled text, work out where it happened first. Whether the value stored in the database is itself corrupt, or the database is fine and the display is breaking it, leads to completely different fixes. Looking at the raw bytes with something like SELECT HEX(column) settles it immediately. If it is only the display, check both the Content-Type: text/html; charset=utf-8 on the HTTP response and the <meta charset="utf-8"> in the HTML — the header wins, so fixing only the meta tag changes nothing.

📖 How to Use

  1. 1
    Paste garbled text
    Copy garbled text from your email or file and paste it here.
  2. 2
    Press Auto Fix
    It tries UTF-8 / Shift_JIS / EUC-JP / ISO-2022-JP / URL combinations.
  3. 3
    Pick a candidate
    Higher-scoring candidates appear at the top. Copy the right one.

❓ Frequently Asked Questions

Why are multiple candidates shown?
Mojibake can arise from multiple paths and cannot always be uniquely identified. We score candidates by Japanese character frequency and rank them.
Is my input sent to a server?
No. We load encoding.js from a CDN and decode entirely in your browser. Text is never transmitted.
Can I load a Shift_JIS or EUC-JP file directly?
Currently only text paste is supported. For full file encoding conversion use the Line Endings & Encoding tool.
🐛 Found a bug or issue with this tool?

Free to use, no signup. Even just the steps to reproduce are helpful. Reports go directly to the operator and help us fix issues.

* Browser info (UA / screen / language / URL) is sent automatically to help reproduce the issue