Skip to content

Convertisseur d'encodage et réparateur de mojibake

Collez du texte illisible et récupérez l'original. Chaque chaîne d'encodage plausible — UTF-8, GBK, Big5, Shift_JIS, EUC-KR, Windows-1252 — est testée puis classée, la chaîne exacte affichée. Gratuit, privé, dans votre navigateur.

Sans pistage Fonctionne dans le navigateur Gratuit
Tout est décodé localement dans votre navigateur — le texte que vous collez ne quitte jamais cet appareil.

Récupérer un texte illisible

Collez le texte illisible. Chaque chaîne d'encodage plausible est essayée et les résultats sont classés — vous n'avez pas besoin de savoir quel encodage a causé le problème.

Essayez ceci

Originaux les plus probables

4 candidats
  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

Convertir et inspecter les encodages

Voyez le même texte sous forme d'octets dans tous les encodages courants à la fois — utile quand vous devez savoir exactement ce que votre base de données ou votre protocole va stocker.

Encodage Octets Hexadécimal
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

Chaque chaîne d'encodage affichée sur cette page est produite par le moteur que la page exécute elle-même, et le contrôle d'aller-retour derrière le badge Exact fait l'objet d'assertions dans la suite de tests unitaires, sur des séquences d'octets connues. — Go Tools Team · 8 sept. 2026

Conçu et vérifié par l'équipe d'ingénierie Go Tools.

Réponses rapides

Quel encodage transforme 测试 en 娴嬭瘯 ?

UTF-8 → GBK Des octets UTF-8 lus comme du GBK. Les six octets UTF-8 (E6 B5 8B E8 AF 95) sont regroupés en trois caractères GBK.

Qu'est-ce qui transforme 测试 en 测试 ?

UTF-8 → Windows-1252 Les mêmes octets UTF-8 lus comme du Windows-1252. Cet encodage tenant sur un seul octet, chacun des six octets devient un caractère à part entière.

Un texte contenant � peut-il être récupéré ?

Irrécupérable Non. Ces octets ont été jetés au moment du décodage. Récupérez ce que vous pouvez du texte environnant et remontez à la source pour le reste.

Combien d'octets fait un caractère chinois ?

3 contre 2 octets Trois en UTF-8, deux en GBK et en Big5. Cet écart est une cause fréquente de troncature quand une colonne est dimensionnée en octets plutôt qu'en caractères.

Qu'est-ce que le mojibake ?

Le mojibake, c'est ce que l'on obtient quand un texte est écrit avec un encodage de caractères et lu avec un autre. Les octets sont intacts, seule l'interprétation est fausse. Cette distinction est toute la raison pour laquelle la récupération est possible : si vous déterminez quel encodage a écrit les octets et lequel les a mal lus, vous pouvez rejouer l'erreur à l'envers et retrouver le texte d'origine.

Le mot est japonais — 文字化け, à peu près « transformation de caractères » — et il s'est imposé comme terme standard en anglais parce que le problème était endémique en informatique japonaise bien avant Unicode. Les textes chinois, japonais et coréens en souffrent bien plus que les textes en alphabet latin, pour une raison structurelle : ces langues ont besoin d'encodages multi-octets, et les encodages multi-octets ne sont pas d'accord entre eux sur la façon de grouper les octets. Une chaîne en alphabet latin est le plus souvent de l'ASCII pur, et tous les encodages s'accordent sur l'ASCII.

La récupération échoue dans un seul cas de figure. Quand un décodeur rencontre des octets qui n'ont aucun sens dans son encodage, il ne les garde pas : il les remplace par U+FFFD et les jette. Ces caractères-là sont définitivement perdus. Tout le reste est réversible.

// 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

Ce que fait cet outil

Pas besoin de connaître l'encodage

Collez le texte illisible et l'outil énumère les chaînes à votre place. Chaque combinaison « écrit en » × « lu comme » entre UTF-8, GBK, GB18030, Big5, Shift_JIS, EUC-KR, Windows-1252 et Windows-1251 est essayée.

Les résultats Exact sont vérifiés, pas devinés

Un candidat n'est marqué Exact que si le repasser par la même chaîne reproduit votre saisie caractère pour caractère. C'est un contrôle déterministe : une estimation classée ne vous dirait pas à quels résultats vous pouvez vous fier.

La chaîne est affichée, pas masquée

Chaque candidat nomme l'encodage qui a écrit les octets et celui qui les a mal lus. C'est ce qu'il vous faut pour corriger la source, plutôt que réparer les mêmes chaînes de caractères la semaine prochaine.

Honnête sur ce qui est irrécupérable

Si la saisie contient déjà des caractères de remplacement, l'outil le dit clairement et marque tous les candidats comme partiels. L'information détruite au décodage ne revient pas, et prétendre le contraire vous fait perdre l'après-midi.

Vue octets dans tous les encodages à la fois

Affichez n'importe quel texte en octets hexadécimaux côte à côte dans tous les encodages pris en charge, et décodez de l'hexadécimal brut dans l'autre sens. Pratique pour dimensionner des colonnes, lire des captures réseau et vérifier le contenu de BLOB.

Rien ne sort de votre navigateur

Le décodage utilise le TextDecoder du navigateur lui-même. Aucun envoi, aucun stockage, aucune réécriture d'URL — ce qui compte, puisque le texte illisible sort en général directement de la production.

Exemples commentés

UTF-8 lu comme du GBK — le cas classique

娴嬭瘯
测试

Les deux caractères chinois étaient correctement stockés en UTF-8 (octets E6 B5 8B E8 AF 95), puis un programme a lu ces six octets comme du GBK. GBK regroupe les octets deux par deux : il a donc produit trois caractères au lieu de deux. C'est ce que l'on obtient quand un fichier UTF-8 est ouvert par une application Windows héritée, ou quand le charset de la connexion à la base est réglé sur gbk alors que les données sont en UTF-8.

UTF-8 lu comme du Windows-1252 — la variante occidentale

测试
测试

Les mêmes octets, une autre erreur. Windows-1252 est un encodage sur un seul octet, donc chacun des six octets UTF-8 est devenu un caractère à part entière. Les langues à alphabet latin tombent constamment sur cette version : café devient café, naïve devient naïve. Les signes révélateurs sont les Ã, Â, â et les signes de ponctuation parasites qui apparaissent par paires.

Des octets que vous avez déjà en hexadécimal

B2 E2 CA D4
测试

Parfois vous ne regardez pas un texte illisible mais un dump hexadécimal issu d'une capture réseau ou d'une colonne BLOB. Collez l'hexadécimal dans la seconde section et choisissez l'encodage. B2 E2 CA D4, c'est 测试 en GBK — les deux mêmes caractères occupent six octets en UTF-8 (E6 B5 8B E8 AF 95) et ne peuvent pas du tout être représentés en Windows-1252.

Un texte que l'on ne peut pas récupérer

鏁版嵁搴�
(récupération partielle uniquement)

数据库 a été écrit en UTF-8 puis lu comme du GBK, mais la dernière paire d'octets n'avait aucun sens en GBK : le décodeur l'a remplacée par U+FFFD. Cet octet est perdu. L'outil le signale au lieu de deviner en silence — vous pouvez encore récupérer 数据 au début de la chaîne, mais le dernier caractère est irrécupérable et il faut remonter aux données source.

Comment utiliser cet outil

  1. 1

    Collez le texte illisible

    Mettez-le tel quel, sans identifier l'encodage au préalable. Un court fragment suffit : une douzaine de caractères permet en général de fixer la chaîne.

  2. 2

    Lisez le premier candidat et son badge

    Exact signifie que la chaîne reproduit exactement votre saisie en aller-retour. Partiel signifie que non : traitez alors le résultat comme une piste.

  3. 3

    Regardez la chaîne d'encodage

    Chaque candidat indique l'encodage dans lequel le texte a réellement été écrit et celui qui l'a mal lu. Cela vous dit quoi corriger en amont, pas seulement ce que disait le texte.

  4. 4

    Inspectez les octets si nécessaire

    La seconde section montre n'importe quel texte sous forme d'octets dans tous les encodages courants, et décode l'hexadécimal brut dans l'autre sens. Servez-vous-en pour dimensionner des colonnes ou vérifier des trames de protocole.

Les erreurs qui aggravent la situation

Convertir un texte qui n'était pas vraiment cassé

Si une chaîne s'affiche correctement et que vous la convertissez quand même, vous créez le mojibake que vous vouliez éviter. Vérifiez d'abord l'affichage, et notez qu'une police manquante donne des carrés (□□□) tandis qu'un problème d'encodage donne de mauvais caractères.

✗ Incorrect
iconv -f UTF-8 -t GBK correct.txt > broken.txt
✓ Correct
# Confirmez d'abord l'encodage actuel
file -I correct.txt   # charset=utf-8 → rien à convertir

Déclarer un charset que les données n'ont pas

Changer le charset déclaré d'une colonne MySQL ne ré-encode pas les octets qu'elle contient. Déclarer en utf8 des données latin1 fait renvoyer par le serveur des octets qui ne sont pas de l'UTF-8 valide, et le pilote les remplace par U+FFFD — ce qui les détruit.

✗ Incorrect
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;
✓ Correct
-- Passez par un type binaire pour préserver les octets au lieu de les réinterpréter
ALTER TABLE t MODIFY c VARBINARY(255);
ALTER TABLE t MODIFY c VARCHAR(255) CHARACTER SET utf8mb4;

Faire confiance à une récupération partielle

Un candidat marqué Partiel n'a pas passé l'aller-retour. C'est une piste à suivre, pas une réponse à réinjecter dans votre base. Si rien ne ressort en Exact, la saisie avait probablement déjà perdu de l'information : remontez aux octets source.

✗ Incorrect
// Prendre le premier candidat quoi que dise le badge
db.update(row.id, candidates[0].text);
✓ Correct
// N'écrire que ce qui passe l'aller-retour
if (candidates[0].lossless) db.update(row.id, candidates[0].text);

Supposer que les habitudes de Python 2 valent encore

Appeler encode sur ce qui est déjà des bytes, ou decode sur ce qui est déjà une str, lève une exception en Python 3 au lieu de faire silencieusement un aller-retour par l'ASCII. Décodez les octets une seule fois, à la frontière, et gardez ensuite le texte comme du texte.

✗ Incorrect
text = raw.decode('utf-8').encode('gbk').decode('utf-8')
✓ Correct
# Décodez une seule fois à la frontière, avec l'encodage réellement utilisé par le fichier
with open(path, encoding='gbk') as f:
    text = f.read()

Quand vous en avez besoin

Une migration de base de données a produit du charabia
Les anciennes tables MySQL déclarées en latin1 alors qu'elles contiennent en réalité des octets UTF-8 sont de loin la source la plus fréquente. Collez ici une ligne illisible pour confirmer la vraie chaîne avant d'écrire votre ALTER TABLE — lancer la conversion dans le mauvais sens transforme un problème récupérable en problème définitif.
Un CSV ouvert dans Excel n'affiche que du charabia
Excel sous Windows suppose toujours la page de code du système pour les fichiers CSV sans BOM, si bien que les exports UTF-8 ressortent en mojibake. Confirmez la chaîne ici, puis ré-exportez avec un BOM ou importez via l'assistant texte en fixant explicitement l'encodage.
Les logs d'un service hérité
Les applications écrites pour GBK ou Shift_JIS produisent des logs dans ces encodages, et les agrégateurs de logs modernes lisent tout en UTF-8. Collez une ligne pour la récupérer — et comme rien n'est envoyé nulle part, vous pouvez le faire avec des logs de production.
Des noms de fichiers cassés par une archive ZIP
Le format ZIP n'a pas de champ d'encodage : les archives créées sur un Windows chinois ou japonais transportent des noms de fichiers en GBK ou Shift_JIS que les outils Unix lisent comme de l'UTF-8. Récupérez ici les vrais noms avant de renommer quoi que ce soit.
Dimensionner une colonne de base de données
La vue octets montre le même texte dans tous les encodages à la fois. Un caractère chinois occupe 3 octets en UTF-8 mais 2 en GBK, et c'est exactement le genre d'écart qui transforme un VARCHAR(50) en bug de troncature.

Comment naît le mojibake

Les octets survivent, le sens non
Encoder associe des caractères à des octets ; décoder fait le chemin inverse. Le mojibake est un décodage avec la mauvaise table. Les octets n'ont jamais été abîmés, c'est pourquoi rejouer le mauvais décodage à l'envers restitue exactement l'original — à condition que ce mauvais décodage n'ait rien jeté.
Pourquoi les textes CJC souffrent le plus
L'ASCII occupe 0x00–0x7F et tous les encodages courants s'accordent dessus, donc le texte anglais passe indemne. Le chinois, le japonais et le coréen exigent des séquences multi-octets, et les encodages divergent sur la façon de les grouper. UTF-8 utilise trois octets par caractère chinois, GBK en utilise deux. Donnez des octets UTF-8 à un décodeur GBK et le découpage se décale, produisant un nombre différent de caractères différents.
Le test d'aller-retour
Pour chaque chaîne candidate, l'outil ré-encode le texte récupéré avec le premier encodage et le redécode avec le second. Si cela reproduit exactement la saisie, la chaîne explique chaque caractère et le candidat est marqué Exact. Les candidats qui échouent au test restent affichés, car une récupération partielle permet souvent d'identifier le texte même sans le reproduire.
D'où viennent les tables d'encodage
Le TextDecoder du navigateur fournit les tables. Encoder dans l'autre sens est plus délicat, parce que TextEncoder ne gère que l'UTF-8 : l'outil construit donc une table inverse en parcourant l'espace des octets et en demandant au décodeur ce que signifie chaque séquence. La correspondance reste ainsi toujours cohérente avec le comportement du navigateur lui-même, et aucune table n'est téléchargée sur votre appareil.
L'heuristique de classement, et ses limites
Au-delà du test d'aller-retour, les candidats sont notés selon la proportion de caractères chinois courants (ceux dont l'octet de tête GBK tombe entre 0xB0 et 0xF7), moins des pénalités pour les caractères de remplacement, les katakanas demi-chasse et les caractères de contrôle. Les katakanas demi-chasse sont un signal fort de Shift_JIS, car un texte japonais normal ne s'en sert quasiment jamais. C'est une heuristique : elle départage, elle n'établit pas la vérité.

Éviter que cela se reproduise

Corrigez la source, pas seulement la chaîne de caractères
La chaîne d'encodage affichée sous chaque candidat vous dit quel composant est mal configuré. Réparer le texte sans corriger le charset de la connexion, le lecteur de fichiers ou le paramètre d'export revient à recommencer demain avec de nouvelles données.
Confirmez le sens avant de convertir un fichier entier
Passez d'abord une ligne représentative par cette page. Convertir dans le mauvais sens peut produire des caractères de remplacement et, contrairement à l'erreur initiale, cette étape-là n'est pas réversible.
Fixez l'encodage explicitement partout
Charset de la connexion à la base, Content-Type HTTP, appels d'ouverture de fichier, exports CSV. Chaque endroit qui se rabat sur « l'encodage du système » est un endroit où le même bug revient dès que le code change de machine.
Préférez utf8mb4 à utf8 dans MySQL
L'utf8 de MySQL stocke au plus trois octets par caractère : les emoji et certains caractères chinois rares sont donc tronqués en silence. utf8mb4 est le véritable UTF-8. C'est une panne différente du mojibake et l'outil de récupération n'y peut rien, parce que les octets ont réellement disparu.
Gardez les octets d'origine jusqu'à validation du correctif
Faites une copie avant toute conversion. Tant que les octets d'origine existent, tout mauvais décodage est réversible ; une fois écrasés par des caractères de remplacement, aucun outil de cette page ni d'ailleurs ne les ramènera.

Questions fréquentes

Comment réparer des caractères chinois qui s'affichent en charabia ?
Collez le texte illisible dans le champ en haut de cette page. L'outil essaie chaque chaîne d'encodage plausible et classe les résultats : vous n'avez pas à identifier l'encodage vous-même. Dans l'immense majorité des cas, la réponse est du texte UTF-8 lu comme du GBK (vous verrez des caractères du genre 娴嬭瘯) ou du texte UTF-8 lu comme du Windows-1252 (vous verrez 测试). Les deux se récupèrent exactement.
Que vérifie réellement le badge Exact ?
Il exécute la récupération à l'envers. Le texte récupéré est ré-encodé avec le premier encodage de la chaîne, et ces octets sont redécodés avec le second. Si le résultat reproduit votre saisie caractère pour caractère, la chaîne explique entièrement ce que vous avez collé et le badge affiche Exact. C'est un contrôle d'aller-retour déterministe et non un score de similarité, ce qui rend un résultat Exact fiable là où une simple estimation classée ne l'est pas.
Pourquoi certains textes illisibles ne se récupèrent-ils jamais ?
Parce que les dégâts ont eu lieu avant que vous ne voyiez le texte. Quand un décodeur rencontre une séquence d'octets qui n'a aucun sens dans son encodage, il ne conserve pas les octets : il les remplace par U+FFFD (affiché �) et les jette. L'opération est destructrice et irréversible. Si votre texte contient �, ces caractères précis sont perdus quel que soit l'outil employé. Cette page vous le dit au lieu de produire une estimation à l'air assuré.
Quelle est la différence entre GBK, GB2312 et GB18030 ?
Ce sont trois générations de la même famille, chacune sur-ensemble de la précédente. GB2312 (1980) couvre 6 763 caractères chinois simplifiés, ce qui suffit au texte courant. GBK (1995) l'étend à environ 21 000 caractères, formes traditionnelles comprises. GB18030 (2000, obligatoire en Chine) couvre tout Unicode. Pour récupérer du mojibake, GBK est presque toujours le bon choix, parce que le logiciel à l'origine du problème avait en général été écrit pour GBK.
ISO-8859-1 et Windows-1252, est-ce la même chose ?
Pas dans les normes, mais oui dans tous les navigateurs. Le WHATWG Encoding Standard — celui que les navigateurs implémentent — traite iso-8859-1 et latin1 comme des étiquettes de windows-1252. Les deux ne diffèrent que dans la plage 0x80–0x9F, où l'ISO-8859-1 véritable place des caractères de contrôle et Windows-1252 des signes imprimables comme le tiret cadratin et les guillemets courbes. Comme ce sont précisément ces signes imprimables qui apparaissent dans le mojibake, Windows-1252 est le plus utile des deux et cet outil le liste une seule fois sous les deux noms.
Mon texte est-il envoyé quelque part ?
Non. Tout le décodage se fait dans votre navigateur via son TextDecoder intégré : rien n'est envoyé sur le réseau, écrit dans le stockage local ni ajouté à l'URL. Cela compte davantage que d'habitude pour cet outil-ci : le texte illisible vient presque toujours d'un log de production, d'une fiche client ou d'un export de base de données, c'est-à-dire exactement ce qu'il ne faut pas coller dans un outil qui tourne côté serveur.
Puis-je convertir un fichier entier et pas seulement un extrait ?
Cette page traite le texte que vous collez. Pour des fichiers entiers, passez par la ligne de commande : iconv -f GBK -t UTF-8 input.txt > output.txt sous macOS ou Linux, ou Get-Content -Encoding Default in.txt | Set-Content -Encoding UTF8 out.txt sous PowerShell. Collez d'abord ici une ligne représentative pour déterminer quels encodages nommer dans la commande — se tromper de sens sur un fichier entier, c'est ainsi qu'un problème d'une ligne en devient un de mille lignes.
Pourquoi l'outil affiche-t-il plusieurs candidats au lieu d'une seule réponse ?
Parce que plusieurs chaînes peuvent produire un texte lisible, et l'outil ne vous le cache pas. Les candidats sont triés en plaçant d'abord les chaînes cohérentes avec elles-mêmes (Exact), puis selon une heuristique de lisibilité qui récompense les caractères chinois courants et pénalise les caractères de remplacement, les katakanas demi-chasse et les caractères de contrôle. L'heuristique départage, elle ne fait pas autorité. Quand deux candidats semblent tous deux plausibles, la chaîne d'encodage affichée sous chacun vous dit lequel est cohérent avec la provenance réelle de vos données.