Retour au blog

Sous-titres et caractères bizarres : corriger l’encodage

Sous-titres avec des caractères bizarres (é, þ, � ou ???) ? Trouvez la page de codes du fichier, convertissez-le en UTF-8 avec Bloc-notes, TextEdit ou FFmpeg.

3 novembre 2026
Sablate Team

Des sous-titres affichent des caractères bizarres quand le lecteur lit le fichier avec le mauvais encodage. Déjà au lieu de Déjà, þ au lieu de ş, des losanges, des points d’interrogation : chaque motif renvoie à une cause précise. La solution est presque toujours la même : convertir le fichier en UTF-8, ou indiquer au lecteur l’ancienne page de codes du fichier.

Dans la suite : comment lire les symboles illisibles, dans quelle page de codes votre fichier se trouve probablement, trois façons de corriger le problème sous Windows et sur Mac, pourquoi les carrés vides relèvent d’autre chose, et comment éviter que cela se reproduise.

Pourquoi les sous-titres affichent-ils des caractères bizarres ?

Un fichier .srt est du texte brut, et le texte brut n’indique pas l’encodage dans lequel il a été enregistré. Le lecteur doit deviner. Il essaie d’abord UTF-8, l’encodage qui contient toutes les écritures, et quand les octets ne forment pas de l’UTF-8 valide, il se rabat sur une valeur par défaut, en général l’ancienne page de codes Windows de l’ordinateur sur lequel il tourne.

Ces anciennes pages de codes sont la racine du problème. Avant que l’UTF-8 devienne la norme, Windows stockait le texte dans une page de codes par région : Windows-1252 pour l’Europe occidentale, 1254 pour le turc, 1251 pour le cyrillique, 949 pour le coréen, 932 pour le japonais. Chacune réutilise les mêmes valeurs d’octet pour des lettres différentes. L’octet qui signifie ş dans un fichier turc signifie þ dans un fichier occidental.

La référence des pages de codes de Microsoft pose le problème sans détour : ces pages de codes « peuvent différer d’un ordinateur à l’autre, ou être modifiées sur un même ordinateur, ce qui entraîne une corruption des données », et elle recommande l’UTF-8 à la place. Un sous-titre créé il y a des années sur un PC turc ou coréen et lu aujourd’hui sur un portable anglais est exactement dans ce cas.

Le texte lui-même est en général toujours dans le fichier. Seule la lecture est fausse, ce qui explique que la correction soit rapide dès qu’on connaît la vraie page de codes du fichier.

Ce que vous disent les symboles illisibles

Chaque symptôme a sa propre cause. Ces exemples viennent de vrais fichiers que nous avons encodés puis ouverts de la mauvaise façon :

Ce que vous voyezCe qui s’est passéCorrection
Déjà vu, ç, ö (deux symboles pour une lettre)Un fichier UTF-8 a été lu comme du Windows-1252Réglez le lecteur sur UTF-8, ou enregistrez le fichier en UTF-8 with BOM
Þu iþi çýðlýk, Ïðèâåò, Za¿ó³æ (lettres fausses)Un fichier en page de codes turque, russe ou polonaise a été lu comme de l’européen occidentalConvertissez de la vraie page de codes vers l’UTF-8
Des losanges � ou �ȳ��ϼ���Un fichier en ancienne page de codes a été lu comme de l’UTF-8Convertissez de la vraie page de codes vers l’UTF-8
??? à la place des lettresLes lettres ont été supprimées quand quelqu’un a enregistré le texte dans une page de codes qui ne les contient pasRécupérez le fichier d’origine ; aucune conversion ne les restaure
Des carrés vides, le reste correctLa police n’a pas de glyphes pour cette écriture ; le texte est intactChangez de police

Les deux premières lignes sont les plus courantes, et elles sont opposées. Dans la première, le fichier est déjà correct et c’est le lecteur qui se trompe. Dans la deuxième et la troisième, le fichier est dans une ancienne page de codes, donc il s’affiche mal dans tous les lecteurs qui ne devinent pas cette page de codes. Le convertir une fois en UTF-8 règle le problème dans tous les lecteurs à la fois.

Dans quelle page de codes est votre fichier de sous-titres ?

La langue des sous-titres vous le dit. Un fichier qui n’est pas en UTF-8 est presque toujours dans l’ancienne page de codes Windows de sa langue :

Langue des sous-titresAncienne page de codes WindowsNom pour FFmpeg
Anglais, français, allemand, espagnol, portugais, italien1252CP1252
Polonais, tchèque, hongrois1250CP1250
Russe, ukrainien, bulgare1251CP1251
Grec1253CP1253
Turc1254CP1254
Arabe1256CP1256
Japonais932 (Shift-JIS)CP932
Coréen949CP949
Chinois simplifié936 (GB2312)GB18030
Chinois traditionnel950 (Big5)CP950

GB18030 est un sur-ensemble de la page de codes du chinois simplifié, il lit donc aussi les fichiers enregistrés en GBK ou en GB2312.

Pour vérifier ce que vous avez, ouvrez le fichier dans le Bloc-notes de Windows : la barre d’état indique l’encodage, et « ANSI » désigne une ancienne page de codes. Sur Mac, ou dans Git Bash sous Windows, lancez :

file --mime-encoding subtitles.srt

utf-8 ou us-ascii signifie que le fichier est correct et que le lecteur est en cause. iso-8859-1 ou unknown-8bit signifie une ancienne page de codes. L’outil ne peut pas dire laquelle, alors fiez-vous à la langue du tableau.

Trois façons de corriger l’encodage des sous-titres

  1. Réenregistrer le fichier en UTF-8 dans un éditeur de texte. Gratuit et rapide pour un seul fichier.
  2. Le convertir avec FFmpeg. Une commande, n’importe quelle page de codes, sous Windows, Mac et Linux.
  3. Indiquer l’encodage au lecteur ou à l’encodeur. Pas de nouveau fichier, mais la correction reste limitée à ce programme.

Les deux premières donnent un fichier UTF-8 qui se lit correctement partout. La troisième est un contournement pour un programme sur un ordinateur.

Méthode 1 : enregistrer le fichier de sous-titres en UTF-8 dans le Bloc-notes ou TextEdit

Sous Windows, ouvrez le .srt dans le Bloc-notes. Quand un fichier n’est pas de l’UTF-8 valide, le Bloc-notes le lit avec la page de codes de votre système Windows. Cela fonctionne si le fichier correspond à votre système : un fichier turc sur un Windows turc s’ouvre correctement. Si le texte est correct, choisissez Fichier → Enregistrer sous, réglez Encodage sur UTF-8 et enregistrez sous un nouveau nom. Si le texte est faux dans le Bloc-notes aussi, la page de codes de votre système n’est pas celle du fichier : passez à la méthode 2.

Sur Mac, TextEdit vous laisse choisir l’encodage à l’ouverture du fichier. Le guide d’Apple sur les caractères qui ne s’affichent pas correctement donne la marche à suivre : dans la fenêtre d’ouverture, cliquez sur Show Options (Afficher les options), puis choisissez un encodage dans le menu Plain Text Encoding (Encodage du texte brut). Prenez celui de la langue des sous-titres, vérifiez que le texte est correct, puis enregistrez une copie en UTF-8. Le réglage par défaut pour l’enregistrement se trouve dans TextEdit → Settings → Open and Save, sous Plain Text File Encoding.

Deux limites : cela se fait fichier par fichier, et cela ne marche que si le texte est correct après l’ouverture. N’enregistrez jamais un fichier qui paraît encore illisible : vous écririez définitivement de mauvaises lettres en UTF-8.

Méthode 2 : convertir les sous-titres en UTF-8 avec FFmpeg

FFmpeg lit un fichier de sous-titres dans n’importe quelle page de codes que vous nommez avec -sub_charenc, option que la documentation de FFmpeg décrit ainsi : « Définit l’encodage des caractères des sous-titres en entrée », et il écrit la sortie en UTF-8. Utilisez la ligne qui correspond à votre langue. Nous avons testé chacune sur des fichiers d’essai :

ffmpeg -sub_charenc CP1252 -i french.srt french-utf8.srt
ffmpeg -sub_charenc CP1250 -i polish.srt polish-utf8.srt
ffmpeg -sub_charenc CP1251 -i russian.srt russian-utf8.srt
ffmpeg -sub_charenc CP1253 -i greek.srt greek-utf8.srt
ffmpeg -sub_charenc CP1254 -i turkish.srt turkish-utf8.srt
ffmpeg -sub_charenc CP1256 -i arabic.srt arabic-utf8.srt
ffmpeg -sub_charenc CP932 -i japanese.srt japanese-utf8.srt
ffmpeg -sub_charenc CP949 -i korean.srt korean-utf8.srt
ffmpeg -sub_charenc GB18030 -i chinese.srt chinese-utf8.srt
ffmpeg -sub_charenc CP950 -i chinese-traditional.srt chinese-traditional-utf8.srt

-sub_charenc doit venir avant -i. Sans lui, FFmpeg s’arrête avec cette erreur, ce qui permet aussi de reconnaître qu’un fichier n’est pas en UTF-8 :

Invalid UTF-8 in decoded subtitles text; maybe missing -sub_charenc option

Si la sortie affiche encore de mauvaises lettres, la page de codes était mal devinée. Essayez la page voisine du tableau. Un fichier cyrillique lu en CP1251 ne peut jamais donner du turc, donc une erreur se repère au premier coup d’œil.

La même commande fonctionne sous Windows, Mac et Linux, et FFmpeg est gratuit.

Méthode 3 : régler l’encodage dans VLC, HandBrake ou l’incrustation FFmpeg

Si vous préférez ne pas créer de nouveau fichier, indiquez l’encodage au programme qui le lit.

VLC. La page du wiki VideoLAN sur l’encodage des sous-titres donne le chemin : Tools → Preferences (Outils → Préférences), puis Subtitles / OSD → Default encoding. Choisissez la page de codes, appuyez sur Save et redémarrez VLC. Cela règle les cas de la deuxième et de la troisième ligne du tableau des symptômes. Cela ne change VLC que sur cet ordinateur : le même fichier s’affiche toujours mal sur un téléviseur, un téléphone ou un serveur multimédia.

HandBrake. À l’import d’un SRT dans l’onglet Subtitles, la documentation de HandBrake demande de « vérifier que le bon code de caractères est sélectionné dans la liste déroulante “Char Code” », et prévient qu’un mauvais choix « donnera un fichier de sortie sans piste de sous-titres ».

Incrustation FFmpeg. Le filtre subtitles a sa propre option charenc, ce qui permet d’incruster directement dans l’image un fichier en ancienne page de codes :

ffmpeg -i video.mp4 -vf "subtitles=turkish.srt:charenc=CP1254" -c:a copy output.mp4

Sur Mac, le ffmpeg par défaut de Homebrew n’a pas libass et signale que le filtre subtitles n’existe pas ; installez ffmpeg-full et lancez son binaire depuis $(brew --prefix ffmpeg-full)/bin/ffmpeg. Les autres options d’incrustation sont dans notre guide pour incruster des sous-titres dans une vidéo.

Des carrés vides à la place des lettres : un problème de police, pas d’encodage

Des carrés vides signifient que le texte a été lu correctement et que la police n’a aucun glyphe pour le dessiner. Convertir le fichier n’y change rien.

L’aspect dépend du moteur de rendu. Nous avons incrusté avec FFmpeg sous Windows une réplique coréenne stylée en Impact, une police uniquement latine : libass a dessiné la virgule et le point en Impact et pris le hangul dans une autre police installée. Pas de carrés, mais un rendu mélangé que vous n’avez pas choisi. Les carrés apparaissent quand aucune police de la machine ne couvre l’écriture, ce qui arrive sur des serveurs et sur des lecteurs dont le jeu de polices intégré est réduit.

La solution est de nommer une police qui couvre la langue. Dans une incrustation FFmpeg, cela passe par force_style :

ffmpeg -i video.mp4 -vf "subtitles=korean-utf8.srt:force_style='FontName=Malgun Gothic'" -c:a copy output.mp4

Quelle police système couvre quelle écriture sous Windows et sur Mac, vous le trouverez dans notre guide des polices de sous-titres.

Comment Sablate gère l’encodage et les polices des sous-titres

Sablate écrit tous ses exports de sous-titres, .srt, .vtt, .txt et .ass, en UTF-8. Une transcription part d’Unicode, donc aucune page de codes n’entre jamais dans le fichier, et le même export se lit correctement en coréen, en turc ou en arabe.

Les polices sont gérées par langue. Chaque couche de traduction a son propre style, et quand la police de sous-titrage que vous avez choisie ne peut pas dessiner l’écriture, Sablate la remplace par une police fournie avec le système : Malgun Gothic sous Windows et Apple SD Gothic Neo sur Mac pour le coréen, Yu Gothic UI et Hiragino Sans pour le japonais, Microsoft YaHei et PingFang SC pour le chinois simplifié. L’aperçu utilise la même police que l’incrustation, ce que vous vérifiez est donc ce qui sera rendu.

Une limite, sans détour : l’import .srt et .vtt de Sablate lit les fichiers en UTF-8 et ne détecte pas les anciennes pages de codes. Convertissez un ancien fichier avec la méthode 1 ou la méthode 2 avant de l’importer. La présentation des fonctionnalités détaille le reste de l’éditeur et des exports.

Lit les anciennes pages de codesCe que vous obtenezPlateformesPrix
NotepadSeulement la page de codes de votre systèmeUne copie UTF-8 du fichierWindowsGratuit
TextEditOui, au choix à l’ouvertureUne copie UTF-8 du fichierMacGratuit
FFmpegOui, toutes, avec -sub_charenc ou charencUne copie UTF-8, ou une vidéo avec sous-titres incrustésWindows, Mac et LinuxGratuit
VLCOui, avec Default encodingUne lecture correcte sur cet ordinateurWindows, Mac et LinuxGratuit
HandBrakeOui, avec Char Code à l’import d’un SRTUne vidéo avec les sous-titres dedansWindows, Mac et LinuxGratuit
SablateNon, import UTF-8 uniquementDes exports UTF-8 et une police d’incrustation par langueWindows et MacOffre gratuite ; Pro $29 en paiement unique ou $5.99 par mois

Pour réparer un fichier existant, les outils gratuits l’emportent : FFmpeg et TextEdit lisent n’importe quelle ancienne page de codes, pas Sablate. Sablate convient quand vous fabriquez les sous-titres, surtout en plusieurs langues, et voulez des fichiers qui n’auront jamais besoin de cette réparation.

Quelle correction choisir ?

« Un fichier s’affiche mal dans VLC sur mon propre ordinateur. » Changez le Default encoding de VLC, ou convertissez le fichier une fois pour toutes et n’y pensez plus.

« Les sous-titres doivent passer sur un téléviseur, un téléphone, Plex ou YouTube. » Convertissez en UTF-8 avec la méthode 1 ou 2. Les autres appareils ne partageront pas vos réglages VLC, et la page de YouTube sur les fichiers de sous-titres indique qu’un SRT « doit être en UTF-8 brut ».

« Je vois é et ö. » Le fichier est déjà en UTF-8. Corrigez le lecteur, ou enregistrez une copie en UTF-8 with BOM dans le Bloc-notes pour que le fichier annonce son encodage.

« J’incruste les sous-titres. » Utilisez charenc dans la commande FFmpeg, ou convertissez d’abord, puis vérifiez la police pour la langue.

« Je vois des points d’interrogation. » Cessez de convertir et retrouvez le fichier d’origine. Les lettres ne sont plus dans celui-ci.

Comment éviter que les sous-titres se cassent à nouveau

Enregistrez chaque fichier de sous-titres en UTF-8. Dans le Bloc-notes, c’est le choix d’Encodage dans Enregistrer sous ; évitez ANSI. Sur Mac, réglez une fois pour toutes l’encodage d’enregistrement de TextEdit sur UTF-8.

Convertissez avant de modifier. Modifier un fichier illisible puis le convertir mélange deux encodages dans un même fichier, et le résultat est bien plus difficile à réparer.

Gardez l’original jusqu’à ce que la copie convertie s’affiche correctement là où elle sera réellement lue : sur le téléviseur, dans le serveur multimédia, sur le site. Si un vieil appareil se trompe encore sur l’UTF-8, une copie enregistrée en UTF-8 with BOM règle généralement le problème, car le BOM signale le fichier comme de l’UTF-8 aux programmes qui devineraient sinon.

Quand vous créez des sous-titres de zéro, l’encodage fait partie du travail bien fait. Comment créer un fichier SRT couvre les pièges de la fenêtre d’enregistrement sous Windows et sur Mac.

Si vous générez des sous-titres au lieu d’en réparer d’anciens, commencez dans un outil qui écrit de l’UTF-8 et choisit une police par langue à votre place. Téléchargez Sablate pour Windows ou Mac et exportez votre premier fichier dans l’une de ses 100 langues de transcription.

Questions fréquentes

Pourquoi mes sous-titres affichent-ils des caractères bizarres ?

Parce que le lecteur a lu le fichier avec le mauvais encodage. Un fichier de sous-titres n’indique pas l’encodage utilisé : le lecteur devine, et une erreur transforme les lettres accentuées ou non latines en symboles. Convertissez le fichier en UTF-8, ou indiquez au lecteur la page de codes d’origine du fichier, et les lettres reviennent.

Comment convertir un fichier de sous-titres en UTF-8 ?

Ouvrez-le dans un éditeur de texte qui le lit correctement et enregistrez une copie en UTF-8, ou lancez FFmpeg avec l’ancienne page de codes du fichier, par exemple ffmpeg -sub_charenc CP1254 -i input.srt output.srt pour du turc. FFmpeg écrit le nouveau fichier en UTF-8. Vérifiez le résultat dans votre lecteur avant de supprimer l’original.

Comment changer l’encodage des sous-titres dans VLC ?

Ouvrez Tools, puis Preferences, puis Subtitles / OSD, et choisissez la page de codes du fichier dans la liste Default encoding. Cliquez sur Save et redémarrez VLC pour que le changement s’applique. Ce réglage ne corrige que la lecture dans VLC sur cet ordinateur : convertissez le fichier en UTF-8 s’il doit aussi passer sur un téléviseur, un téléphone ou un site web.

Pourquoi les sous-titres affichent-ils des points d’interrogation à la place des lettres ?

Parce que les lettres ont été perdues quand le texte a été enregistré dans un encodage qui n’a pas de place pour elles. Un sous-titre coréen ou russe enregistré en texte d’Europe occidentale, par exemple, garde un point d’interrogation pour chaque lettre qu’il ne peut pas contenir. Aucune conversion ne les restaure : il faut le fichier d’origine ou un nouvel export depuis la source.

Que signifie Invalid UTF-8 in decoded subtitles text dans FFmpeg ?

FFmpeg attendait un fichier de sous-titres en UTF-8 et a trouvé des octets d’une ancienne page de codes. Le message de FFmpeg suggère lui-même la solution : ajoutez -sub_charenc avec l’encodage du fichier avant -i, par exemple CP1251 pour le russe ou CP949 pour le coréen, ou utilisez l’option charenc du filtre subtitles quand vous incrustez le fichier.

Quel encodage utiliser pour les fichiers de sous-titres ?

UTF-8. Il contient toutes les écritures dans un seul encodage, si bien que le même fichier se lit correctement dans n’importe quelle langue sur n’importe quel appareil. YouTube exige des SRT en UTF-8 brut, et les lecteurs, téléviseurs et serveurs multimédias le lisent bien plus sûrement qu’une ancienne page de codes Windows. Si un vieil appareil se trompe encore, essayez UTF-8 with BOM.