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.
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.
Plak de verminkte tekst. Elke plausibele coderingsketen wordt geprobeerd en de resultaten worden gerangschikt — je hoeft niet te weten welke codering het probleem veroorzaakte.
测试
UTF-8 → GBK
娴å¬ç˜¯
Windows-1252 / Latin-1 → UTF-8
测试
Windows-1252 / Latin-1 → GBK
测试
Windows-1251 → GBK
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 |
Gebouwd en geverifieerd door het engineeringteam van Go Tools.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
娴嬭瘯
测试
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.
测试
测试
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.
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.
鏁版嵁搴�
(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.
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.
Exact betekent dat de keten teken voor teken terugleidt naar je invoer. Gedeeltelijk betekent van niet; behandel het resultaat dan als aanwijzing.
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.
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.
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.
iconv -f UTF-8 -t GBK correct.txt > broken.txt
# Controleer eerst de huidige codering file -I correct.txt # charset=utf-8 → geen conversie nodig
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.
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
-- 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 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.
// Pak de eerste kandidaat, wat de badge ook zegt db.update(row.id, candidates[0].text);
// Schrijf alleen terug wat de controle in twee richtingen doorstaat if (candidates[0].lossless) db.update(row.id, candidates[0].text);
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.
text = raw.decode('utf-8').encode('gbk').decode('utf-8') # Decodeer één keer op de grens, met de codering die het bestand echt gebruikt
with open(path, encoding='gbk') as f:
text = f.read() 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. Encodering en formattering
De volledige ASCII-tabel: 128 tekens in decimaal, hex, octaal en binair, plus een converter die beide kanten op werkt. Stuurtekens met escape-sequenties, caret-notatie en de plek waar je ze echt tegenkomt.
Encodering en formattering
Base64 decoderen en encoderen direct in je browser. Realtime conversie met volledige UTF-8- en emoji-ondersteuning. 100% privé — geen account nodig.
Encodering en formattering
Decodeer een Base64-string of data-URI terug naar een afbeelding in je browser. Bekijk voorbeeld, lees afmetingen & MIME, download als PNG, JPG, GIF, SVG. Geen upload.
Encodering en formattering
Zet CSV om naar JSON in uw browser. RFC 4180, type-afleiding, headerregel, big-int veilig. 100% privé, geen upload.
Encodering en formattering
Plak een .env-bestand, krijg direct JSON. Je wachtwoorden, API-sleutels en tokens verlaten nooit je browser — 100% privé, gratis dotenv-parser.
Encodering en formattering
Decodeer HTML-entiteiten en unescape HTML online — gratis, geen account, 100% in je browser. Zet genoemde, decimale & hex-referenties terug naar tekens; nooit geüpload.