Skip to content

Encoding converter & mojibake-herstel

Plak verminkte tekst en krijg het origineel terug. Elke plausibele coderingsketen — UTF-8, GBK, Big5, Shift_JIS, EUC-KR, Windows-1252 — wordt geprobeerd en gerangschikt, met de keten erbij. Gratis: alles draait in je browser.

Geen tracking Draait in je browser Gratis
Alles wordt lokaal in je browser gedecodeerd — wat je plakt verlaat dit apparaat niet.

Verminkte tekst herstellen

Plak de verminkte tekst. Elke plausibele coderingsketen wordt geprobeerd en de resultaten worden gerangschikt — je hoeft niet te weten welke codering het probleem veroorzaakte.

Probeer deze

Meest waarschijnlijke originelen

4 kandidaten
  1. 测试

    Exact

    UTF-8 → GBK

  2. 娴嬭瘯

    Exact

    Windows-1252 / Latin-1 → UTF-8

  3. 测试

    Exact

    Windows-1252 / Latin-1 → GBK

  4. 测试

    Exact

    Windows-1251 → GBK

Coderingen omzetten en bekijken

Zie dezelfde tekst als bytes in elke gangbare codering tegelijk — handig als je precies moet weten wat je database of protocol opslaat.

Codering Bytes Hex
UTF-8 6 E4 B8 AD E6 96 87
GBK 4 D6 D0 CE C4
GB18030 4 D6 D0 CE C4
Big5 4 A4 A4 A4 E5
Shift_JIS 4 92 86 95 B6
EUC-KR 4 F1 E9 D9 FE

Elke coderingsketen op deze pagina komt uit dezelfde engine die de pagina zelf draait, en de controle in twee richtingen achter de badge Exact wordt in de unittestsuite getoetst aan bekende bytereeksen. — Go Tools Team · Sep 8, 2026

Gebouwd en geverifieerd door het engineeringteam van Go Tools.

Snelle antwoorden

Welke codering verandert 测试 in 娴嬭瘯?

UTF-8 → GBK UTF-8-bytes die als GBK gelezen worden. De zes UTF-8-bytes (E6 B5 8B E8 AF 95) worden hergroepeerd tot drie GBK-tekens.

Wat verandert 测试 in 测试?

UTF-8 → Windows-1252 Dezelfde UTF-8-bytes, gelezen als Windows-1252. Omdat die codering één byte per teken gebruikt, wordt elk van de zes bytes een eigen teken.

Is tekst met � erin nog te herstellen?

Niet herstelbaar Nee. Die bytes zijn bij het decoderen weggegooid. Haal eruit wat de omringende tekst nog oplevert en ga voor de rest terug naar de bron.

Hoeveel bytes is een Chinees teken?

3 tegen 2 bytes Drie in UTF-8, twee in GBK en Big5. Dat verschil is een veelvoorkomende oorzaak van afkappen wanneer een kolom in bytes is gedimensioneerd in plaats van in tekens.

Wat is mojibake?

Mojibake is wat je krijgt als tekst met de ene tekencodering geschreven is en met een andere gelezen wordt. De bytes zijn intact; alleen de interpretatie klopt niet. Juist dat onderscheid maakt herstel mogelijk: kun je achterhalen welke codering de bytes schreef en welke ze verkeerd las, dan kun je de vergissing terugdraaien en de oorspronkelijke tekst terugkrijgen.

Het woord is Japans — 文字化け, ruwweg “tekenverandering” — en het werd ook in het Engels de standaardterm, omdat het probleem in de Japanse informatica al lang vóór Unicode endemisch was. Chinese, Japanse en Koreaanse tekst heeft er veel meer last van dan tekst in het Latijnse schrift, en daar zit een structurele reden achter: die talen hebben coderingen van meerdere bytes nodig, en zulke coderingen zijn het onderling oneens over hoe je bytes groepeert. Een string in Latijns schrift is meestal gewoon ASCII, en over ASCII is elke codering het eens.

Herstel mislukt in precies één situatie. Komt een decoder bytes tegen die in zijn codering geen betekenis hebben, dan houdt hij ze niet — hij zet er U+FFFD voor in de plaats en gooit ze weg. Die tekens zijn definitief verloren. Al het andere is omkeerbaar.

// The mistake, in three lines of JavaScript
const bytes = new TextEncoder().encode('测试');   // UTF-8: E6 B5 8B E8 AF 95
new TextDecoder('gbk').decode(bytes);            // '娴嬭瘯'  ← mojibake
new TextDecoder('windows-1252').decode(bytes);   // '测试'  ← same bytes, other mistake

Wat deze tool doet

Je hoeft de codering niet te kennen

Plak de verminkte tekst; de tool zet de ketens voor je op een rij. Elke combinatie van geschreven-als en gelezen-als over UTF-8, GBK, GB18030, Big5, Shift_JIS, EUC-KR, Windows-1252 en Windows-1251 komt aan bod.

Exacte resultaten zijn geverifieerd, niet geraden

Een kandidaat krijgt Exact alleen als hij, terug door dezelfde keten, je invoer teken voor teken oplevert. Dat is een deterministische controle — een gerangschikte gok zou je niet vertellen welke resultaten je kunt vertrouwen.

De keten staat erbij, verstopt is hij niet

Bij elke kandidaat staat welke codering de bytes schreef en welke ze verkeerd las. Dat heb je nodig om de bron te repareren, in plaats van volgende week dezelfde strings opnieuw op te lappen.

Eerlijk over onherstelbare tekst

Bevat de invoer al vervangingstekens, dan zegt de tool dat ronduit en markeert hij elke kandidaat als gedeeltelijk. Informatie die bij het decoderen vernietigd is komt niet terug, en doen alsof kost je een middag.

Bytes in elke codering tegelijk

Zie willekeurige tekst als hex-bytes over alle ondersteunde coderingen naast elkaar, en decodeer ruwe hex de andere kant op. Handig voor kolomgroottes, packet captures en de inhoud van BLOB-velden.

Er verlaat niets je browser

Het decoderen gebruikt de ingebouwde TextDecoder van de browser. Geen upload, geen opslag, geen URL die wordt herschreven — en dat telt, want verminkte tekst komt meestal rechtstreeks uit productie.

Uitgewerkte voorbeelden

UTF-8 gelezen als GBK — het klassieke geval

娴嬭瘯
测试

De twee Chinese tekens stonden correct opgeslagen als UTF-8 (bytes E6 B5 8B E8 AF 95), waarna een programma diezelfde zes bytes als GBK las. GBK leest bytes twee aan twee, dus kwamen er drie tekens uit in plaats van twee. Dit krijg je als een UTF-8-bestand geopend wordt door een oude Windows-applicatie, of als de codering van een databaseverbinding op gbk staat terwijl de data UTF-8 is.

UTF-8 gelezen als Windows-1252 — de westerse variant

测试
测试

Dezelfde bytes, een andere vergissing. Windows-1252 werkt met één byte per teken, dus werd elk van de zes UTF-8-bytes een eigen teken. Talen met een Latijns schrift lopen hier voortdurend tegenaan: café wordt café, naïef wordt naïef. De verraders zijn Ã, Â, â en losse leestekens die in paren opduiken.

Bytes die je al in hex hebt

B2 E2 CA D4
测试

Soms kijk je niet naar verminkte tekst maar naar een hexdump uit een packet capture of een BLOB-kolom. Plak de hex in het tweede blok en kies de codering. B2 E2 CA D4 is 测试 in GBK — dezelfde twee tekens kosten zes bytes in UTF-8 (E6 B5 8B E8 AF 95) en zijn in Windows-1252 helemaal niet weer te geven.

Tekst die niet meer te herstellen is

鏁版嵁搴�
(alleen gedeeltelijk)

数据库 werd als UTF-8 geschreven en als GBK gelezen, maar het laatste bytepaar had geen betekenis in GBK, dus zette de decoder er U+FFFD voor in de plaats. Die byte is weg. De tool meldt dat in plaats van er stilletjes naar te raden — je haalt 数据 nog wel uit het begin van de string, maar het laatste teken is onherstelbaar en daarvoor moet je terug naar de brondata.

Zo gebruik je deze tool

  1. 1

    Plak de verminkte tekst

    Zet hem er meteen in — je hoeft de codering niet eerst te herkennen. Een kort fragment is genoeg; een teken of twaalf pint de keten meestal al vast.

  2. 2

    Lees de bovenste kandidaat en zijn badge

    Exact betekent dat de keten teken voor teken terugleidt naar je invoer. Gedeeltelijk betekent van niet; behandel het resultaat dan als aanwijzing.

  3. 3

    Controleer de coderingsketen

    Bij elke kandidaat staat in welke codering de tekst echt geschreven was en welke hem verkeerd las. Dat vertelt je wat je bovenstrooms moet repareren, niet alleen wat er stond.

  4. 4

    Bekijk de bytes als je die nodig hebt

    Het tweede blok toont willekeurige tekst als bytes in elke gangbare codering, en decodeert ruwe hex de andere kant op. Handig om kolomgroottes te bepalen of protocolframes te controleren.

Fouten die het erger maken

Tekst omzetten die nooit echt stuk was

Ziet een string er goed uit en zet je hem tóch om, dan maak je precies de mojibake die je wilde vermijden. Controleer eerst de weergave, en let op: een ontbrekend lettertype toont blokjes (□□□), terwijl een coderingsprobleem verkeerde tekens toont.

✗ Fout
iconv -f UTF-8 -t GBK correct.txt > broken.txt
✓ Correct
# Controleer eerst de huidige codering
file -I correct.txt   # charset=utf-8 → geen conversie nodig

Een charset opgeven die de data niet heeft

De opgegeven charset van een MySQL-kolom veranderen encodeert de bytes erin niet opnieuw. Latin1-data als utf8 opgeven zorgt ervoor dat de server bytes teruggeeft die geen geldige UTF-8 zijn, waarna de driver ze vervangt door U+FFFD — en daarmee vernietigt.

✗ Fout
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
✓ Correct
-- Ga via een binair type, dan blijven de bytes behouden in plaats van opnieuw geïnterpreteerd
ALTER TABLE t MODIFY c VARBINARY(255);
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;

Een gedeeltelijk herstel vertrouwen

Een kandidaat met het label Gedeeltelijk kwam niet rond. Het is een aanwijzing die je kunt volgen, geen antwoord dat je terugplakt in je database. Komt er niets terug als Exact, dan is de invoer waarschijnlijk al informatie kwijt — ga terug naar de bronbytes.

✗ Fout
// Pak de eerste kandidaat, wat de badge ook zegt
db.update(row.id, candidates[0].text);
✓ Correct
// Schrijf alleen terug wat de controle in twee richtingen doorstaat
if (candidates[0].lossless) db.update(row.id, candidates[0].text);

Aannemen dat Python 2-gewoonten nog gelden

encode aanroepen op iets dat al bytes is, of decode op iets dat al een string is, geeft in Python 3 een fout in plaats van stilletjes een omweg via ASCII te maken. Decodeer bytes één keer, op de grens, en houd tekst daarna tekst.

✗ Fout
text = raw.decode('utf-8').encode('gbk').decode('utf-8')
✓ Correct
# Decodeer één keer op de grens, met de codering die het bestand echt gebruikt
with open(path, encoding='gbk') as f:
    text = f.read()

Wanneer je dit nodig hebt

Een databasemigratie leverde onzin op
Oude MySQL-tabellen die latin1 opgeven terwijl er UTF-8-bytes in staan zijn veruit de meest voorkomende bron. Plak hier een verminkte rij om de echte keten te bevestigen voordat je de ALTER TABLE schrijft — de conversie de verkeerde kant op uitvoeren maakt van een herstelbaar probleem een blijvend probleem.
Een CSV in Excel toont onzin
Excel op Windows gaat voor CSV-bestanden zonder BOM nog steeds uit van de codepagina van het systeem, dus komen UTF-8-exports eruit als mojibake. Bevestig hier de keten en exporteer daarna opnieuw mét BOM, of importeer via de tekstwizard met de codering expliciet ingesteld.
Logbestanden van een oude service
Applicaties die tegen GBK of Shift_JIS gebouwd zijn schrijven hun logs in die coderingen, en moderne logverzamelaars lezen alles als UTF-8. Plak een regel om hem te herstellen — en omdat er niets geüpload wordt, kan dat ook met productielogs.
Bestandsnamen verminkt door een ZIP-archief
Het ZIP-formaat heeft geen veld voor de codering, dus archieven die op Chinese of Japanse Windows gemaakt zijn dragen bestandsnamen in GBK of Shift_JIS die Unix-tools als UTF-8 lezen. Herstel hier de echte namen voordat je iets hernoemt.
De grootte van een databasekolom bepalen
Het byteoverzicht toont dezelfde tekst in elke codering tegelijk. Een Chinees teken is 3 bytes in UTF-8 maar 2 in GBK, en precies zulke verschillen maken van een VARCHAR(50) een afkapfout.

Zo ontstaat mojibake

Bytes overleven, betekenis niet
Encoderen zet tekens om in bytes; decoderen zet bytes weer terug. Mojibake is een decodering met de verkeerde tabel. De bytes zelf raakten nooit beschadigd, en juist daarom levert het terugdraaien van die verkeerde decodering het origineel exact op — mits die verkeerde decodering niets heeft weggegooid.
Waarom CJK-tekst er het meest onder lijdt
ASCII bezet 0x00–0x7F en elke gangbare codering is het daarover eens, dus Engelse tekst komt er ongeschonden doorheen. Chinees, Japans en Koreaans hebben reeksen van meerdere bytes nodig, en de coderingen zijn het oneens over hoe je die groepeert. UTF-8 gebruikt drie bytes per Chinees teken, GBK twee. Geef UTF-8-bytes aan een GBK-decoder en de groepering verschuift: er komt een ander aantal andere tekens uit.
De controle in twee richtingen
Voor elke kandidaatketen encodeert de tool de herstelde tekst opnieuw met de eerste codering en decodeert die opnieuw met de tweede. Levert dat exact de invoer op, dan verklaart de keten elk teken en krijgt de kandidaat het label Exact. Kandidaten die zakken voor die test worden alsnog getoond, want een gedeeltelijk herstel maakt de tekst vaak herkenbaar, ook als het hem niet kan reproduceren.
Waar de coderingstabellen vandaan komen
De TextDecoder van de browser levert de tabellen. De andere richting is lastiger, want TextEncoder ondersteunt alleen UTF-8 — daarom bouwt de tool een omgekeerde tabel door de byteruimte af te lopen en de decoder te vragen wat elke reeks betekent. Daarmee klopt de toewijzing altijd met het gedrag van de browser zelf, en gaan er geen opzoektabellen naar je apparaat.
De rangschikkingsheuristiek en haar grenzen
Naast de controle in twee richtingen krijgen kandidaten een score voor hoeveel van de tekst uit veelgebruikte Chinese tekens bestaat (die waarvan de eerste GBK-byte in 0xB0–0xF7 valt), minus strafpunten voor vervangingstekens, halfbrede katakana en stuurtekens. Halfbrede katakana is een sterk Shift_JIS-signaal, want normale Japanse tekst gebruikt het nauwelijks. Dit is een heuristiek; ze breekt gelijke standen, ze stelt geen waarheid vast.

Zo voorkom je herhaling

Repareer de bron, niet alleen de string
De coderingsketen onder elke kandidaat vertelt je welk onderdeel verkeerd staat ingesteld. Herstel je de tekst zonder de codering van de verbinding, de bestandslezer of de exportinstelling te corrigeren, dan doe je het morgen opnieuw met verse data.
Bevestig de richting voordat je een heel bestand omzet
Haal eerst een representatieve regel door deze pagina. De verkeerde kant op omzetten kan vervangingstekens opleveren, en anders dan de oorspronkelijke vergissing is die stap niet terug te draaien.
Stel de codering overal expliciet in
De codering van de databaseverbinding, de HTTP Content-Type, de aanroepen die bestanden openen, de CSV-exports. Elke plek die terugvalt op “de codering van het systeem” is een plek waar dezelfde bug terugkomt zodra de code naar een andere machine verhuist.
Kies utf8mb4 boven utf8 in MySQL
De utf8 van MySQL slaat hoogstens drie bytes per teken op, dus emoji en sommige zeldzamere Chinese tekens worden stilzwijgend afgekapt. utf8mb4 is echte UTF-8. Dit is een ander soort storing dan mojibake en de hersteltool kan er niets aan doen, want die bytes zijn echt weg.
Bewaar de oorspronkelijke bytes tot de fix bewezen is
Maak een kopie voordat je iets omzet. Zolang de oorspronkelijke bytes bestaan is elke verkeerde decodering terug te draaien — zijn ze eenmaal overschreven met vervangingstekens, dan haalt geen enkele tool op deze pagina of waar dan ook ze nog terug.

Veelgestelde vragen

Hoe herstel ik Chinese tekens die als onzin op mijn scherm staan?
Plak de verminkte tekst in het veld boven aan deze pagina. De tool probeert elke plausibele coderingsketen en rangschikt de resultaten, dus je hoeft de codering niet zelf te herkennen. In veruit de meeste gevallen is het antwoord UTF-8-tekst die als GBK gelezen is (je ziet dan tekens als 娴嬭瘯) of UTF-8-tekst die als Windows-1252 gelezen is (je ziet dan 测试). Allebei worden ze exact hersteld.
Wat controleert de badge Exact precies?
Die draait het herstel om. De herstelde tekst wordt opnieuw geëncodeerd met de eerste codering uit de keten, en die bytes worden opnieuw gedecodeerd met de tweede. Komt daar teken voor teken je invoer uit, dan verklaart de keten volledig wat je geplakt hebt en staat er Exact. Dit is een deterministische controle in twee richtingen en geen gelijkeniscijfer, en daarom is een Exact-resultaat betrouwbaar op een manier waarop een gerangschikte gok dat niet is.
Waarom is sommige verminkte tekst nooit meer te herstellen?
Omdat de schade al was aangericht voordat jij hem zag. Komt een decoder een reeks bytes tegen die in zijn codering geen betekenis heeft, dan bewaart hij die bytes niet — hij zet er U+FFFD voor in de plaats (getoond als �) en gooit ze weg. Dat verlies is onomkeerbaar. Staat er � in je tekst, dan zijn precies die tekens weg, welke tool je ook gebruikt. Deze pagina zegt dat gewoon, in plaats van je een zelfverzekerd ogende gok voor te zetten.
Wat is het verschil tussen GBK, GB2312 en GB18030?
Het zijn drie generaties van dezelfde familie, elk een superset van de vorige. GB2312 (1980) dekt 6.763 vereenvoudigde Chinese tekens — genoeg voor alledaagse tekst. GBK (1995) breidt dat uit tot ongeveer 21.000 tekens, inclusief traditionele vormen. GB18030 (2000, verplicht in China) dekt heel Unicode. Voor het herstellen van mojibake is GBK vrijwel altijd de juiste keuze, want de software die het probleem veroorzaakte was meestal tegen GBK geschreven.
Is ISO-8859-1 hetzelfde als Windows-1252?
Volgens de standaarden niet, in elke browser wel. De WHATWG Encoding Standard — die browsers implementeren — behandelt iso-8859-1 en latin1 als labels voor windows-1252. De twee verschillen alleen in het bereik 0x80–0x9F, waar echte ISO-8859-1 stuurtekens heeft en Windows-1252 drukbare leestekens zoals de lange gedachtestreep en gekrulde aanhalingstekens. Omdat juist die drukbare tekens in mojibake opduiken, is Windows-1252 de nuttigste van de twee en staat hij hier één keer onder allebei de namen.
Gaat mijn tekst ergens naartoe?
Nee. Al het decoderen gebeurt in je browser met de ingebouwde TextDecoder, en er gaat niets naar het netwerk, naar opslag of naar de URL. Dat telt bij deze tool zwaarder dan gewoonlijk: verminkte tekst komt bijna altijd uit een productielog, een klantrecord of een databasedump, en dat zijn precies de dingen die je niet in een tool aan de serverkant hoort te plakken.
Kan ik een heel bestand omzetten, niet alleen een fragment?
Deze pagina werkt met tekst die je erin plakt. Voor complete bestanden gebruik je de commandoregel: iconv -f GBK -t UTF-8 input.txt > output.txt op macOS of Linux, of Get-Content -Encoding Default in.txt | Set-Content -Encoding UTF8 out.txt in PowerShell. Haal hier eerst een representatieve regel doorheen om te bepalen welke coderingen je in het commando moet noemen — de richting verkeerd om kiezen op een heel bestand is hoe een probleem van één regel er duizend worden.
Waarom toont de tool meerdere kandidaten in plaats van één antwoord?
Omdat meer dan één keten leesbare tekst kan opleveren, en de tool dat niet voor je verbergt. Kandidaten staan gesorteerd: eerst de ketens die met zichzelf kloppen (Exact), daarna op een leesbaarheidsheuristiek die veelgebruikte Chinese tekens beloont en vervangingstekens, halfbrede katakana en stuurtekens bestraft. Die heuristiek breekt gelijke standen, ze spreekt geen waarheid uit. Zien twee kandidaten er allebei plausibel uit, dan vertelt de coderingsketen onder elk van beide welke past bij de plek waar je data echt vandaan komt.

Gerelateerde tools

Alle tools bekijken →