Welche Kodierung macht aus 测试 das Wirrwarr 娴嬭瘯?
UTF-8 → GBK UTF-8-Bytes, als GBK gelesen. Die sechs UTF-8-Bytes (E6 B5 8B E8 AF 95) werden zu drei GBK-Zeichen umgruppiert.
Kaputten Text einfügen und den Originaltext zurückbekommen. Jede plausible Kodierungskette — UTF-8, GBK, Big5, Shift_JIS, EUC-KR, Windows-1252 — wird geprüft, bewertet und mit Kette angezeigt. Kostenlos, privat, im Browser.
Fügen Sie den kaputten Text ein. Jede plausible Kodierungskette wird probiert und die Ergebnisse werden sortiert — Sie müssen nicht wissen, welche Kodierung ihn zerlegt hat.
测试
UTF-8 → GBK
娴å¬ç˜¯
Windows-1252 / Latin-1 → UTF-8
测试
Windows-1252 / Latin-1 → GBK
测试
Windows-1251 → GBK
Sehen Sie denselben Text auf einen Blick als Bytes in allen gängigen Kodierungen — nützlich, wenn Sie genau wissen müssen, was Ihre Datenbank oder Ihr Protokoll speichert.
| Kodierung | 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 |
Erstellt und geprüft vom Engineering-Team von Go Tools.
UTF-8 → GBK UTF-8-Bytes, als GBK gelesen. Die sechs UTF-8-Bytes (E6 B5 8B E8 AF 95) werden zu drei GBK-Zeichen umgruppiert.
UTF-8 → Windows-1252 Dieselben UTF-8-Bytes, als Windows-1252 gelesen. Weil diese Kodierung ein Byte pro Zeichen verwendet, wird jedes der sechs Bytes zu einem eigenen Zeichen.
Nicht wiederherstellbar Nein. Diese Bytes wurden beim Dekodieren verworfen. Holen Sie aus dem umgebenden Text, was geht, und für den Rest zurück an die Quelle.
3 statt 2 Bytes Drei in UTF-8, zwei in GBK und Big5. Dieser Unterschied ist eine häufige Ursache für Abschneidefehler, wenn eine Spalte in Bytes statt in Zeichen dimensioniert ist.
Mojibake entsteht, wenn Text mit einer Zeichenkodierung geschrieben und mit einer anderen gelesen wird. Die Bytes sind unversehrt; falsch ist allein die Interpretation. Genau auf diesem Unterschied beruht die Wiederherstellung: Wer herausfindet, welche Kodierung die Bytes geschrieben und welche sie falsch gelesen hat, kann den Fehler rückwärts ausführen und den Originaltext zurückholen.
Das Wort ist japanisch — 文字化け, ungefähr „Zeichenverwandlung“ — und hat sich als Fachbegriff durchgesetzt, weil das Problem in der japanischen Datenverarbeitung lange vor Unicode allgegenwärtig war. Chinesischer, japanischer und koreanischer Text ist weit häufiger betroffen als lateinischer, und das aus einem strukturellen Grund: Diese Sprachen brauchen Mehrbyte-Kodierungen, und Mehrbyte-Kodierungen sind sich uneinig darüber, wie Bytes zu gruppieren sind. Eine Zeichenkette in lateinischer Schrift ist meist reines ASCII, und über ASCII sind sich alle Kodierungen einig.
Die Wiederherstellung scheitert in genau einer Situation. Trifft ein Decoder auf Bytes, die in seiner Kodierung keine Bedeutung haben, behält er sie nicht — er ersetzt sie durch U+FFFD und wirft sie weg. Diese Zeichen sind dauerhaft verloren; alles andere ist umkehrbar.
// 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 Text einfügen genügt, die Ketten zählt das Werkzeug für Sie durch. Jede Kombination aus Schreib- und Lesekodierung über UTF-8, GBK, GB18030, Big5, Shift_JIS, EUC-KR, Windows-1252 und Windows-1251 wird probiert.
Ein Kandidat gilt nur dann als exakt, wenn der Rücklauf durch dieselbe Kette Ihre Eingabe Zeichen für Zeichen reproduziert. Das ist eine deterministische Prüfung — eine sortierte Schätzung würde Ihnen nicht sagen, welchen Ergebnissen Sie trauen können.
Jeder Kandidat benennt die Kodierung, die die Bytes geschrieben hat, und die, die sie falsch gelesen hat. Das brauchen Sie, um die Quelle zu reparieren, statt nächste Woche dieselben Zeichenketten erneut zu flicken.
Enthält die Eingabe bereits Ersatzzeichen, sagt das Werkzeug das klar und markiert jeden Kandidaten als teilweise. Beim Dekodieren zerstörte Information kommt nicht zurück, und etwas anderes zu behaupten kostet Sie einen Nachmittag.
Sehen Sie beliebigen Text als Hex-Bytes über alle unterstützten Kodierungen nebeneinander und dekodieren Sie rohes Hex in die Gegenrichtung. Nützlich für Spaltenbreiten, Paketmitschnitte und BLOB-Inhalte.
Dekodiert wird mit dem TextDecoder des Browsers. Kein Upload, keine Speicherung, kein Umschreiben der URL — was zählt, weil kaputter Text meist direkt aus der Produktion kommt.
娴嬭瘯
测试
Die beiden chinesischen Zeichen lagen korrekt als UTF-8 vor (Bytes E6 B5 8B E8 AF 95), dann las ein Programm diese sechs Bytes als GBK. GBK fasst Bytes paarweise zusammen und erzeugte deshalb drei Zeichen statt zwei. Genau das bekommt man, wenn eine UTF-8-Datei in einer alten Windows-Anwendung geöffnet wird oder wenn der Zeichensatz einer Datenbankverbindung auf gbk steht, während die Daten UTF-8 sind.
测试
测试
Dieselben Bytes, ein anderer Fehler. Windows-1252 ist eine Einzelbyte-Kodierung, also wurde jedes der sechs UTF-8-Bytes zu einem eigenen Zeichen. Sprachen in lateinischer Schrift trifft diese Variante ständig: aus café wird café, aus naïve wird naïve. Verräterisch sind paarweise auftretende Ã, Â, â und verirrte Satzzeichen.
B2 E2 CA D4
测试
Manchmal steht man nicht vor kaputtem Text, sondern vor einem Hex-Dump aus einem Paketmitschnitt oder einer BLOB-Spalte. Fügen Sie die Hex-Bytes in den zweiten Abschnitt ein und wählen Sie die Kodierung. B2 E2 CA D4 ist 测试 in GBK — dieselben zwei Zeichen belegen in UTF-8 sechs Bytes (E6 B5 8B E8 AF 95) und lassen sich in Windows-1252 überhaupt nicht darstellen.
鏁版嵁搴�
(nur teilweise)
数据库 wurde als UTF-8 geschrieben und als GBK gelesen, aber das letzte Bytepaar hatte in GBK keine Bedeutung, also ersetzte der Decoder es durch U+FFFD. Dieses Byte ist weg. Das Werkzeug weist darauf hin, statt still zu raten — 数据 am Anfang der Zeichenkette lässt sich noch wiederherstellen, das letzte Zeichen aber nicht, dafür müssen Sie zurück an die Quelldaten.
Direkt hineinkopieren — die Kodierung muss vorher nicht bekannt sein. Ein kurzer Ausschnitt genügt; ein Dutzend Zeichen legt die Kette meist schon fest.
Exakt heißt, die Kette führt im Round-Trip exakt zu Ihrer Eingabe zurück. Teilweise heißt, sie tut es nicht — dann ist das Ergebnis nur ein Hinweis.
Jeder Kandidat zeigt, in welcher Kodierung der Text wirklich geschrieben war und welche ihn falsch gelesen hat. Das sagt Ihnen, was stromaufwärts zu reparieren ist, nicht nur, was dastand.
Der zweite Abschnitt zeigt beliebigen Text als Bytes in allen gängigen Kodierungen und dekodiert rohes Hex in die andere Richtung. Nützlich für Spaltenbreiten und Protokollrahmen.
Wird eine Zeichenkette korrekt angezeigt und trotzdem konvertiert, erzeugen Sie genau das Mojibake, das Sie vermeiden wollten. Prüfen Sie zuerst die Anzeige, und beachten Sie: Eine fehlende Schriftart erscheint als Kästchen (□□□), ein Kodierungsproblem dagegen als falsche Zeichen.
iconv -f UTF-8 -t GBK correct.txt > broken.txt
# Zuerst die aktuelle Kodierung bestätigen file -I correct.txt # charset=utf-8 → nichts zu konvertieren
Den deklarierten Zeichensatz einer MySQL-Spalte zu ändern, kodiert die enthaltenen Bytes nicht neu. Deklariert man latin1-Daten als utf8, liefert der Server Bytes zurück, die kein gültiges UTF-8 sind, und der Treiber ersetzt sie durch U+FFFD — womit sie zerstört sind.
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
-- Über einen Binärtyp gehen, damit die Bytes erhalten statt neu interpretiert werden ALTER TABLE t MODIFY c VARBINARY(255); ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
Ein als teilweise markierter Kandidat hat den Round-Trip nicht bestanden. Er ist eine Spur, der man nachgehen kann, aber keine Antwort, die man in die Datenbank zurückschreibt. Kommt gar nichts als exakt zurück, hat die Eingabe wahrscheinlich schon Information verloren — dann zurück zu den Quellbytes.
// Einfach den ersten Kandidaten nehmen, egal was das Badge sagt db.update(row.id, candidates[0].text);
// Nur zurückschreiben, was den Round-Trip besteht if (candidates[0].lossless) db.update(row.id, candidates[0].text);
encode auf etwas aufzurufen, das schon Bytes ist, oder decode auf etwas, das schon eine Zeichenkette ist, wirft in Python 3 eine Ausnahme, statt still einen Umweg über ASCII zu nehmen. Dekodieren Sie Bytes einmal, an der Grenze, und behandeln Sie sie danach als Text.
text = raw.decode('utf-8').encode('gbk').decode('utf-8') # Einmal an der Grenze dekodieren, mit der Kodierung, die die Datei wirklich verwendet
with open(path, encoding='gbk') as f:
text = f.read() VARCHAR(50) einen Abschneidefehler macht.TextDecoder des Browsers. Die Gegenrichtung ist kniffliger, weil TextEncoder nur UTF-8 beherrscht — deshalb baut das Werkzeug eine Rückabbildung auf, indem es den Byteraum durchläuft und den Decoder nach der Bedeutung jeder Sequenz fragt. Die Abbildung stimmt damit immer mit dem Verhalten Ihres Browsers überein, und es werden keine Nachschlagetabellen an Ihr Gerät ausgeliefert.Content-Type, Aufrufe zum Öffnen von Dateien, CSV-Exporte. Jede Stelle, die auf „die Kodierung des Systems“ zurückfällt, ist eine Stelle, an der derselbe Fehler zurückkommt, sobald der Code auf einer anderen Maschine läuft.utf8 speichert höchstens drei Bytes pro Zeichen, deshalb werden Emoji und einige seltenere chinesische Zeichen stillschweigend abgeschnitten. utf8mb4 ist echtes UTF-8. Das ist ein anderer Fehler als Mojibake, und dieses Werkzeug hilft dabei nicht — diese Bytes sind wirklich weg.U+FFFD (angezeigt als �) und verwirft sie. Das ist verlustbehaftet und irreversibel. Enthält Ihr Text �, sind genau diese Zeichen verloren, ganz gleich welches Werkzeug Sie verwenden. Diese Seite sagt Ihnen das, statt eine selbstbewusst wirkende Schätzung zu liefern. iso-8859-1 und latin1 als Labels für windows-1252. Die beiden unterscheiden sich nur im Bereich 0x80–0x9F: Dort hat das echte ISO-8859-1 Steuerzeichen, Windows-1252 dagegen druckbare Satzzeichen wie den Geviertstrich und typografische Anführungszeichen. Weil genau diese druckbaren Zeichen in Mojibake auftauchen, ist Windows-1252 das nützlichere der beiden, und dieses Werkzeug führt es einmal unter beiden Namen. TextDecoder; nichts geht über das Netz, wird gespeichert oder in die URL geschrieben. Das wiegt bei diesem Werkzeug schwerer als sonst: Kaputter Text stammt fast immer aus einem Produktions-Log, einem Kundendatensatz oder einem Datenbank-Dump — also genau aus dem, was man nicht in ein serverseitiges Werkzeug einfügen sollte. iconv -f GBK -t UTF-8 input.txt > output.txt unter macOS oder Linux, beziehungsweise Get-Content -Encoding Default in.txt | Set-Content -Encoding UTF8 out.txt in der PowerShell. Prüfen Sie zuerst eine repräsentative Zeile hier, um zu ermitteln, welche Kodierungen im Befehl stehen müssen — die falsche Richtung auf einer ganzen Datei macht aus einem einzeiligen Problem ein tausendzeiliges. Kodierung & Formatierung
Die vollständige ASCII-Tabelle: 128 Zeichen in Dezimal, Hex, Oktal und Binär, dazu ein Konverter in beide Richtungen. Steuerzeichen mit Escape-Sequenzen, Caret-Notation und dem Ort, an dem sie Ihnen wirklich begegnen.
Kodierung & Formatierung
Base64 online kostenlos dekodieren und kodieren. Echtzeitkonvertierung mit voller UTF-8- und Emoji-Unterstützung. 100 % privat — läuft in Ihrem Browser. Keine Anmeldung nötig.
Kodierung & Formatierung
Eine Base64-Zeichenkette oder einen Data-URI im Browser zurück in ein Bild dekodieren. Vorschau, Abmessungen & MIME ablesen, dann als PNG, JPG, GIF, SVG herunterladen. Kein Upload.
Kodierung & Formatierung
CSV im Browser nach JSON konvertieren. RFC 4180, Typinferenz, Kopfzeile, Big-Int-sicher. 100 % privat, kein Upload.
Kodierung & Formatierung
Eine .env-Datei einfügen, sofort JSON erhalten. Datenbankpasswörter, API-Keys und Tokens verlassen nie deinen Browser — 100% privat, kein Upload.
Kodierung & Formatierung
HTML-Entities dekodieren und HTML online unescapen — kostenlos, ohne Anmeldung, 100 % im Browser. Wandelt benannte, dezimale & Hex-Referenzen zurück in Zeichen; nichts wird hochgeladen.