Zum Inhalt springen
Aback Tools Logo

Mojibake und Unicode-Kodierungsfehler beheben: Erkennung, Reparatur und Vorbeugung

So beheben Sie Mojibake und Unicode-Kodierungsfehler: warum é statt é erscheint, die Diskrepanzen zwischen UTF-8/Latin-1 und Windows-1252, automatische Reparatur im Browser, Wiederherstellung bei Doppelkodierung und Vorbeugung an jeder Systemgrenze.

DH
Tutorials & How-Tos12 Min. Lesezeit2,700 Wörter

Sie kopieren Text aus einer Datenbank oder einem Dokument, und er sieht so aus: „échéance“ oder „‘typografische Anführungszeichen’“. Das ist Mojibake — Text, der in einem Zeichensatz kodiert und in einem anderen dekodiert wurde. Dieser Leitfaden erklärt genau, warum das passiert, wie Sie erkennen, welche Kodierungsdiskrepanz vorliegt, und wie Sie sie mit den richtigen Tools in Sekunden beheben.

UTF-8Universelle LösungKorrekte Kodierung für 98 % des Webs
1M+Unicode-ZeichenCodepunkte im Standard
< 5sReparaturzeitFür die meisten Mojibake-Texte

Was ist Mojibake?

Mojibake (文字化け) ist ein japanischer Begriff für „Zeichenverwandlung“: Er beschreibt den entstellten Text, der erscheint, wenn eine Zeichenfolge mit der falschen Zeichenkodierung interpretiert wird. Statt „résumé“ sehen Sie „résumé“. Statt eines typografischen Apostrophs sehen Sie „’“. Die Zeichen sind auf Byte-Ebene nicht beschädigt — die Bytes sind in Ordnung. Das Problem ist, dass die Software, die sie liest, das falsche Regelwerk verwendet, um Bytes in Zeichen zu übersetzen.

Das Problem der Byte-zu-Zeichen-Übersetzung

Jede Zeichenkodierung ist eine Zuordnung zwischen Zahlen (Bytes) und Zeichen. Der Buchstabe „e“ ist in praktisch jeder Kodierung das Byte 0x65. Aber ein akzentuiertes „é“ wird je nach Kodierung unterschiedlich dargestellt: in UTF-8 ist es die Zwei-Byte-Sequenz 0xC3 0xA9, in Latin-1 das einzelne Byte 0xE9. Liest ein Programm die UTF-8-Bytes 0xC3 0xA9 nach Latin-1-Regeln, erzeugt es zwei getrennte Zeichen — Ã und © — statt des einzelnen Zeichens é. Diese Vertauschung ist Mojibake.

  • é wird zu é — UTF-8-Bytes als Latin-1 gelesen (das häufigste Muster)
  • ü wird zu ü — dieselbe Diskrepanz beim deutschen u-Umlaut
  • ’ (rechtes einfaches Anführungszeichen) wird zu ’ — UTF-8-typografisches Zeichen als Latin-1 missverstanden
  • – (Halbgeviertstrich) wird zu – — häufig in aus Word oder PDF eingefügtem Text
  • Unicode-Ersatzzeichen — ein gültiges Zeichen wurde in einen Kontext gezwungen, der es nicht darstellen kann

Note

Mojibake ist keine Datenkorruption — die Originalbytes sind meist intakt. Das bedeutet, dass sich der Text oft vollständig reparieren lässt, wenn Sie die ursprüngliche Kodierung und die falsche Kodierung kennen, mit der er missverstanden wurde. Das [Unicode- und Kodierungsreparatur-Tool](/tools/data/formatters/unicode-and-encoding-repair-tool) behandelt die häufigsten Muster automatisch.

Warum Kodierungsfehler auftreten

Kodierungsfehler sind ein Problem der Systemgrenzen. Sie treten auf, wenn Text eine Grenze überschreitet — zwischen Datei und Anwendung, zwischen Datenbank und API, zwischen Webserver und Browser — und sich Sender und Empfänger nicht darüber einig sind, welche Kodierung der Text verwendet. In einer Welt, in der UTF-8 der universelle Standard ist, sollten diese Fehler selten sein. Aber sie sind häufig, weil Legacy-Systeme, Windows-Tools und bestimmte Datenbanken standardmäßig noch ältere Kodierungen verwenden.

Die häufigsten Quellen

  • CSV-Dateien aus Excel — Excel speichert CSV unter Windows standardmäßig als Windows-1252, nicht als UTF-8. Unter Linux oder in Python werden die Akzentzeichen entstellt.
  • MySQL-Datenbanken mit latin1-Zeichensatz — ältere MySQL-Installationen verwenden standardmäßig `latin1` für Spaltenzeichensätze. UTF-8-Daten darin zu speichern, verursacht beim Lesen Mojibake.
  • E-Mail-Header und -Inhalte — E-Mail-Clients, die keinen Zeichensatz deklarieren oder eine Deklaration falsch lesen, erzeugen Mojibake in Von-, Betreff- und Inhaltsfeldern.
  • PDF-Textextraktion — PDFs betten Schriften mit eigenen Glyphenzuordnungen ein, die nicht immer Standard-Unicode-Codepunkten entsprechen; beim Kopieren entsteht entstellter Text.
  • HTTP-Antworten ohne Content-Type-Zeichensatz — ein Server, der `Content-Type: text/html` ohne `; charset=utf-8` sendet, lässt den Browser raten — und der rät oft falsch.

UTF-8 vs. Windows-1252 — die häufigste Diskrepanz

Windows-1252 (auch CP1252) ist eine von Microsoft für westeuropäische Sprachen entwickelte Erweiterung von Latin-1. Er verwendet ein Byte pro Zeichen und deckt 256 Codepunkte ab — genug für Englisch, Französisch, Deutsch, Spanisch und Portugiesisch. UTF-8 verwendet ein bis vier Bytes pro Zeichen und deckt alle 1,1 Millionen Unicode-Codepunkte ab. Wird UTF-8-Text als Windows-1252 gelesen, erzeugen die Multibyte-Sequenzen die charakteristischen Zwei- oder Drei-Zeichen-Mojibake-Muster. Umgekehrt — Windows-1252-Text als UTF-8 gelesen — erzeugt Ersatzzeichen (□ oder ?), weil die einzelnen hohen Bytes keine gültigen UTF-8-Sequenzen sind.

Text ohne Kodierungsmetadaten ist kein Text — er ist eine Bytefolge, die darauf wartet, missverstanden zu werden.

- Prinzip des Unicode-Standards

Kodierungsprobleme erkennen

Ein Kodierungsproblem zu erkennen ist meist einfach — das visuelle Erscheinungsbild von Mojibake ist markant genug, um das Diskrepanzmuster zu identifizieren. Für die programmatische Erkennung oder für Text, der korrekt aussieht, aber unsichtbare Probleme enthält, brauchen Sie jedoch spezielle Techniken.

Visuelle Mustererkennung

Die zuverlässigste Diagnose ist das Mojibake-Muster selbst. UTF-8-Text, als Latin-1 gelesen, erzeugt ein charakteristisches „Ó-Präfix gefolgt von einem zweiten Zeichen — zum Beispiel é für é, à für à, ü für ü. Typografische Satzzeichen aus Word oder Rich-Text-Editoren erzeugen Sequenzen, die mit †beginnen — zum Beispiel ’ für ’ und “ für “. Sehen Sie diese Sequenzen, besteht die Lösung darin, die Bytes von Latin-1 zurück nach UTF-8 umzukodieren.

Programmatische Kodierungserkennung

Für Dateien und Datenströme, deren Inhalt Sie nicht visuell sehen können, verwenden Sie die Bibliothek `chardet` (Python) oder das Paket `jschardet` (Node.js), um die Kodierung aus Bytemustern automatisch zu erkennen. Diese Bibliotheken analysieren Häufigkeit und Verteilung der Bytewerte, um die wahrscheinlichste Kodierung zu bestimmen. Sie sind nicht 100 % genau — kurze Zeichenfolgen und solche mit wenigen Nicht-ASCII-Zeichen lassen sich schwerer sicher klassifizieren —, beherrschen aber die gängigen Fälle gut. Verwenden Sie die Unicode-Zeichensuche, um einzelne Codepunkte und ihre erwarteten Bytedarstellungen beim Debuggen bestimmter Zeichen zu prüfen.

Tip

Im Browser können Sie die Kodierung einer Seite erkennen, indem Sie DevTools öffnen (F12), zum Tab Netzwerk gehen, auf das HTML-Dokument klicken und den `Content-Type`-Antwortheader ansehen. Steht dort `text/html` ohne charset-Parameter, rät der Browser — Kodierungsfehler sind also möglich. Die Lösung: `; charset=utf-8` zum Content-Type-Header hinzufügen und ein `<meta charset="UTF-8">`-Tag im HTML-head setzen.

Mojibake online beheben

Der schnellste Weg, Mojibake-Text zu reparieren, ist das Unicode- und Kodierungsreparatur-Tool. Es läuft vollständig in Ihrem Browser — kein Server-Upload, keine Registrierung — und behandelt automatisch die häufigsten UTF-8/Latin-1-Diskrepanzen, entstellte Anführungszeichen und die Entfernung unsichtbarer Zeichen.

1

Erkennen Sie das Muster der Kodierungsdiskrepanz

Bevor Sie Mojibake beheben, identifizieren Sie, welche Diskrepanz vorliegt. Sehen Sie sich die entstellten Zeichen an: Sehen Sie Sequenzen wie é oder ü, ist der Text UTF-8, der als Latin-1 gelesen wurde. Sehen Sie Sequenzen wie ’ oder “, enthält der Text typografische Anführungszeichen oder Satzzeichen, die genauso entstellt wurden. Sehen Sie Fragezeichen oder □-Symbole, war die Kodierung umgekehrt — Nicht-UTF-8-Bytes wurden in einen UTF-8-Kontext gezwungen.

2

Fügen Sie den beschädigten Text in das Reparaturtool ein

Öffnen Sie das Unicode- und Kodierungsreparatur-Tool und fügen Sie Ihren Mojibake-Text in das Eingabefeld ein. Das Tool analysiert den Text sofort und identifiziert die wahrscheinlichste Reparatur: Umkodierung von Latin-1 nach UTF-8, Korrektur typografischer Anführungszeichen, Entfernung von Nullbreitenzeichen, Normalisierung von Unicode-Formen oder Entfernung von Bytereihenfolgemarken. Die Erkennung erfolgt in Ihrem Browser — Ihr Text verlässt Ihr Gerät nicht.

3

Wählen Sie das Kodierungspaar und wenden Sie die Behebung an

Ist die automatische Erkennung korrekt, klicken Sie auf Reparieren, um die Behebung anzuwenden. Passt die automatische Auswahl nicht zu Ihrem Fall, wählen Sie manuell die Quellkodierung (die, als die der Text falsch gelesen wurde) und die Zielkodierung (die, als die er hätte gelesen werden sollen). Für die meisten Webinhalte ist das Paar Latin-1 → UTF-8. Für Windows-CSV-Dateien oft Windows-1252 → UTF-8.

4

Kopieren Sie den reparierten Text und prüfen Sie

Kopieren Sie nach der Reparatur die Ausgabe und fügen Sie sie in Ihren ursprünglichen Kontext zurück ein — einen Dokumenteneditor, eine Datenbankoberfläche oder eine Codedatei. Prüfen Sie, dass alle Akzentzeichen, Anführungszeichen und Sonderzeichen korrekt angezeigt werden, bevor Sie die Änderungen speichern oder committen. Für die Massenreparatur in einer Datenbank testen Sie das Muster an einer Stichprobe von Zeilen, bevor Sie die Korrektur über die gesamte Tabelle laufen lassen.

Unicode- und Kodierungsreparatur-Tool

Mojibake beheben, Kodierungsartefakte reparieren, Unicode normalisieren und unsichtbare Zeichen entfernen — kostenlos, browserbasiert, ohne Dateiupload.

Open tool

Häufige Mojibake-Muster und ihre Behebung

Unterschiedliche Kodierungsdiskrepanzen erzeugen unterschiedliche visuelle Muster. Das Muster zu erkennen verrät Ihnen sowohl die Ursache als auch die richtige Behebung — welches Kodierungspaar anzuwenden oder welcher Reparaturvorgang auszuführen ist.

Mojibake-MusterOriginalzeichenUrsacheBehebung
éé (e akut)UTF-8 als Latin-1 gelesenUmkodieren Latin-1 → UTF-8
üü (u Umlaut)UTF-8 als Latin-1 gelesenUmkodieren Latin-1 → UTF-8
ÀÀ (a gravis)UTF-8 als Latin-1 gelesenUmkodieren Latin-1 → UTF-8
’’ (rechtes Anführungszeichen)UTF-8 als Latin-1 gelesenUmkodieren Latin-1 → UTF-8
““ (linkes Anführungszeichen)UTF-8 als Latin-1 gelesenUmkodieren Latin-1 → UTF-8
–– (Halbgeviertstrich)UTF-8 als Latin-1 gelesenUmkodieren Latin-1 → UTF-8
’’ (rechtes Anführungszeichen)UTF-8 als Windows-1252 gelesenUmkodieren Windows-1252 → UTF-8
? oder □Beliebiges Nicht-ASCII-ZeichenNicht-UTF-8 im UTF-8-KontextOriginalkodierung mit chardet ermitteln

Das Problem der Doppelkodierung

Eine besonders schädliche Variante ist der doppelte Mojibake — Text, der zweimal falsch kodiert wurde. Das erzeugt Sequenzen wie © statt © oder Æ¢ statt ¢. Das passiert, wenn bereits mojibake-geschädigter Text gespeichert und dann ein zweites Mal mit der falschen Kodierung gelesen wird. Die Reparatur erfordert zwei Umkodierungsrunden in umgekehrter Reihenfolge. Das Unicode- und Kodierungsreparatur-Tool erkennt und behandelt die häufigsten Doppelkodierungsmuster automatisch.

Warning

Versuchen Sie nicht, Mojibake durch direktes Suchen-und-Ersetzen in den entstellten Zeichenfolgen zu beheben. Dieser Ansatz funktioniert nur für die konkreten Muster, die Sie kennen, und zerstört jede legitime Verwendung dieser Zeichen. Reparieren Sie immer auf Kodierungsebene — kodieren Sie die Bytes korrekt um —, statt einzelne Zeichenersetzungen zu flicken.

Kodierungsfehler vermeiden

Die langfristige Lösung für Mojibake ist, UTF-8 an jeder Grenze Ihres Systems zu erzwingen — Dateispeicherung, Datenbank, API und Webschicht. Dies sind die konkreten Stellen, an denen Kodierungsdeklarationen explizit sein müssen.

Datenbanken — überall UTF-8 deklarieren

Stellen Sie in MySQL und MariaDB den Standardzeichensatz auf `utf8mb4` (nicht `utf8` — MySQLs `utf8` deckt nur 3-Byte-Sequenzen ab und schließt Emoji und seltene Unicode-Zeichen aus). Setzen Sie ihn auf drei Ebenen: den Serverstandard in `my.cnf`, den Datenbank-Charset und die Zeichensätze einzelner Spalten. In PostgreSQL ist der Standard für neue Installationen bereits UTF-8. In SQLite ist Text standardmäßig immer UTF-8.

sql
-- MySQL: set all levels to utf8mb4
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Dateien — immer als UTF-8 speichern

Wählen Sie beim Speichern von Textdateien, CSV-Exporten oder Konfigurationsdateien immer UTF-8 als Kodierung. In VS Code wird die Kodierung in der Statusleiste angezeigt — klicken Sie, um sie zu ändern. In Excel exportieren Sie CSV als „CSV UTF-8 (Trennzeichen: Komma)“ statt als Standard-„CSV (Trennzeichen: Komma)“. Für Python-Skripte, die Dateien schreiben, übergeben Sie `encoding='utf-8'` immer explizit an den `open()`-Aufruf, statt sich auf den Systemstandard zu verlassen. Bereinigen Sie Text nach dem Einfügen aus externen Quellen mit dem E-Mail-Textbereiniger, der unsichtbare Zeichen entfernt und Leerzeichen automatisch normalisiert.

APIs und HTTP — charset im Content-Type deklarieren

Jede HTTP-Antwort mit Text muss eine Zeichensatzdeklaration enthalten: `Content-Type: application/json; charset=utf-8` oder `Content-Type: text/html; charset=utf-8`. Ohne sie rät der Client — und ältere HTTP-Clients verwenden für `text/html`-Antworten standardmäßig Latin-1. Fügen Sie bei HTML-Seiten zusätzlich `<meta charset="UTF-8">` als erstes Element in `<head>` ein. Bei JSON-APIs impliziert `Content-Type: application/json` gemäß RFC UTF-8, aber Explizitheit beseitigt Mehrdeutigkeit und verhindert Probleme mit nicht konformen Clients.


Kodierungs-Checkliste nach Kontext

  • Python-Dateien: fügen Sie für Python 2 den Header `# -*- coding: utf-8 -*-` hinzu; in Python 3 ist er unnötig, aber harmlos
  • MySQL-Verbindungszeichenfolgen: nehmen Sie `charset=utf8mb4` in den DSN auf — z. B. `mysql+pymysql://user:pass@host/db?charset=utf8mb4`
  • Node.js-Datei-Lesevorgänge: übergeben Sie `encoding: "utf8"` an `fs.readFile()` oder nutzen Sie `Buffer.from(data).toString("utf8")`
  • XML- und HTML-Dokumente: binden Sie immer `<?xml version="1.0" encoding="UTF-8"?>` und `<meta charset="UTF-8">` ein
  • E-Mail-Versandbibliotheken: setzen Sie `Content-Type: text/plain; charset=utf-8` und `Content-Transfer-Encoding: 8bit` oder `quoted-printable`

Unicode-Normalisierung und unsichtbare Zeichen

Jenseits der klassischen UTF-8/Latin-1-Diskrepanz erzeugen zwei weitere Unicode-Probleme subtile, schwerer erkennbare Fehler: Normalisierungsabweichungen und unsichtbare Zeichen. Beide können dazu führen, dass Zeichenfolgenvergleiche fehlschlagen, Datenbanklookups ins Leere laufen und Suchergebnisse unvollständig sind — selbst wenn der Text auf dem Bildschirm identisch aussieht.

Unicode-Normalisierungsformen

Unicode erlaubt, dass dasselbe sichtbare Zeichen auf mehrere Arten dargestellt wird. Der Buchstabe „é“ kann als einzelner vorkomponierter Codepunkt (U+00E9) oder als Kombination aus „e“ (U+0065) gefolgt von einem kombinierenden Akut (U+0301) kodiert werden. Beide sehen auf dem Bildschirm identisch aus, sind aber unterschiedliche Bytefolgen, die Gleichheitsvergleiche von Zeichenfolgen scheitern lassen. Deshalb findet eine Datenbanksuche nach „résumé“ manchmal Ergebnisse nicht — der gespeicherte Text nutzt eine andere Normalisierungsform. NFC (kanonische Dekomposition, gefolgt von kanonischer Komposition) ist die empfohlene Normalform für die meisten Anwendungen. Das Unicode- und Kodierungsreparatur-Tool normalisiert Text im Rahmen seines Reparaturprozesses zu NFC.

Unsichtbare und Nullbreitenzeichen

Nullbreitenzeichen sind Unicode-Codepunkte, die in einer Zeichenfolge Platz einnehmen, aber nichts Sichtbares rendern. Sie werden häufig von Textverarbeitungen, Chat-Anwendungen und Kopier-Einfüge-Vorgängen aus PDFs oder Webseiten eingefügt. Häufige Übeltäter sind das Nullbreitenleerzeichen (U+200B), das Nullbreiten-ohne-Umbruch-Leerzeichen (U+FEFF, auch die Bytereihenfolgemarke) und verschiedene bidirektionale Textsteuerzeichen (U+200E, U+200F, U+202A-U+202E). Diese Zeichen brechen Regex-Muster, verwirren Tokenisierer und lassen identisch aussehende Zeichenfolgen als ungleich vergleichen. Verwenden Sie die Unicode-Zeichensuche, um verdächtige Codepunkte in einer Zeichenfolge zu identifizieren.

Note

Die Bytereihenfolgemarke (BOM, U+FEFF) ist in UTF-8-Dateien besonders problematisch. Sie ist in UTF-8 optional (anders als in UTF-16, wo sie erforderlich ist), aber viele Editoren fügen sie automatisch hinzu. Eine vorhandene UTF-8-BOM erscheint als drei Bytes (0xEF 0xBB 0xBF) am Dateianfang. Programme, die sie nicht erwarten, behandeln sie als Teil des Inhalts — das erste Feld einer CSV erscheint dann als „spaltenname“ statt „spaltenname“. Das Reparaturtool entfernt BOMs automatisch.

Unicode-Zeichensuche

Schlagen Sie jedes Unicode-Zeichen nach Codepunkt oder Name nach, oder fügen Sie ein Zeichen ein, um unsichtbare oder verdächtige Codepunkte in Ihrem Text zu identifizieren.

Open tool

Key takeaways

  • Mojibake entsteht, wenn Textbytes mit der falschen Kodierung gelesen werden — am häufigsten UTF-8-Bytes, die als Latin-1 oder Windows-1252 gelesen werden.
  • Das Muster é (für é) ist die diagnostische Signatur von Mojibake durch UTF-8-als-Latin-1 — das Muster zu erkennen verrät die exakte nötige Behebung.
  • Das Unicode- und Kodierungsreparatur-Tool erkennt und behebt automatisch häufige Mojibake-Muster, unsichtbare Zeichen und Unicode-Normalisierungsprobleme in Ihrem Browser.
  • Beheben Sie Mojibake niemals per Suchen-und-Ersetzen in entstellten Sequenzen — reparieren Sie immer auf Kodierungsebene, indem Sie die Bytes korrekt umkodieren.
  • Vermeiden Sie Kodierungsfehler, indem Sie UTF-8 an jeder Systemgrenze explizit deklarieren: Dateien, Datenbanken, API-Antworten und HTTP-Header.
  • Unsichtbare Zeichen (Nullbreitenleerzeichen, BOM, bidirektionale Steuerzeichen) verursachen Fehler bei Zeichenfolgenvergleichen und Suchen, selbst wenn der Text korrekt aussieht — sie müssen programmatisch entfernt werden.
  • Abweichende Unicode-Normalisierungsformen (NFC vs. NFD) lassen identisch aussehende Zeichenfolgen Gleichheitsvergleiche scheitern — normalisieren Sie zu NFC, bevor Sie Text speichern oder vergleichen.

Häufige Fragen

Mojibake (from the Japanese 文字化け, "character transformation") is garbled text that appears when text encoded in one character set is decoded using a different one. The most common cause is UTF-8 encoded text being read as Latin-1 or Windows-1252 - for example, the UTF-8 byte sequence for é (0xC3 0xA9) is misread as the Latin-1 characters à and ©, producing "é". It happens in databases, file readers, email clients, APIs, and any system that passes text without preserving encoding metadata.

Paste the corrupted text into the Aback Tools Unicode and Encoding Repair Tool at abacktools.com/tools/data/formatters/unicode-and-encoding-repair-tool. The tool automatically detects the most common mojibake patterns and repairs them - UTF-8 read as Latin-1, smart quotes garbled as multi-character sequences, and other common mismatches. Everything runs in your browser with no data sent to any server. The repaired output is ready to copy back into your document, database, or application.

The most reliable indicator is the presence of multi-byte Latin characters appearing where accented letters or punctuation marks should be. Specific patterns are diagnostic: é = é, ü = ü, è = è, ’ = right single quotation mark, “ = left double quotation mark. If you see these patterns, the text was encoded as UTF-8 and decoded as Latin-1 or Windows-1252. A ? or replacement character (U+FFFD, shown as â or �) indicates the opposite: a non-UTF-8 character was forced into a UTF-8 context.

UTF-8 is a variable-width encoding that can represent every character in the Unicode standard - over 1.1 million code points. It uses 1 to 4 bytes per character. Latin-1 (ISO-8859-1) is a fixed-width, single-byte encoding that covers 256 characters - the basic Latin alphabet plus Western European accented characters. Every Latin-1 character is valid as a sequence of UTF-8 bytes, but not all UTF-8 byte sequences are valid Latin-1. This asymmetry is why UTF-8 to Latin-1 mismatches produce recognisable multi-character mojibake patterns.

CSV encoding errors are extremely common because spreadsheet applications default to different encodings - Excel often saves CSV files as Windows-1252 while Linux and Mac tools expect UTF-8. To fix a CSV with encoding errors, open the file in a text editor that lets you set the encoding (VS Code, Notepad++, or TextEdit) and re-save it as UTF-8. For content-level mojibake already written into cells, paste the affected text into the Aback Tools Unicode and Encoding Repair Tool, repair it, and paste the output back.

Invisible Unicode characters are code points that take up space in a string but render as nothing visible - including zero-width space (U+200B), zero-width non-joiner (U+200C), zero-width joiner (U+200D), byte order mark (U+FEFF), and various other formatting characters. They are commonly pasted into forms and documents from word processors, PDF copy-paste, and messenger apps. They break string comparisons, database lookups, regex matches, and search. The Unicode and Encoding Repair Tool strips them automatically during repair.

Yes, but the approach depends on whether the data is stored incorrectly or just declared incorrectly. If the data is correct UTF-8 bytes but the column is declared as Latin-1, changing the column character set without re-encoding will fix the display. If the bytes themselves are wrong (real mojibake stored in the database), you need to repair the strings - extract the affected rows, run them through a mojibake fixer, and write the corrected strings back. Always test the repair on a copy of the data before running a bulk update.

In Python 3, use the `encode`/`decode` pattern with an error handler to repair mojibake: `garbled.encode('latin-1').decode('utf-8')`. This re-encodes the string back to its original bytes using Latin-1 (reversing the misread), then decodes it correctly as UTF-8. If you are reading a file, set the `encoding` parameter explicitly: `open('file.txt', encoding='utf-8')`. For strings with mixed or unknown encoding, the `chardet` library auto-detects the encoding from byte patterns, which you can then pass to `decode()`.

ShareXLinkedIn