Comment puis-je corriger l'encodage d'un fichier?
j'ai un fichier texte codé ANSI qui n'aurait pas dû être codé ANSI car il y avait un accent des caractères que L'ANSI ne supporte pas. Je préférerais travailler avec UTF-8.
les données peuvent-elles être décodées correctement ou sont-elles perdues dans le transcodage?
quels outils puis-je utiliser?
Voici un échantillon de ce que j'ai:
ç é
je peux dire du contexte (cafà © devrait être café) que ceux-ci devraient être ces deux caractères:
ç é
12 réponses
EDIT: une simple possibilité à éliminer avant d'entrer dans des solutions plus compliquées: avez-vous essayé de définir le jeu de caractères à utf8 dans l'éditeur de texte dans lequel vous lisez le fichier? Cela pourrait juste être un cas de quelqu'un qui vous envoie un fichier utf8 que vous lisez dans un éditeur défini pour dire cp1252.
juste en prenant les deux exemples, c'est un cas de utf8 étant lu à travers la lentille d'un encodage à un seul octet, probablement un de iso-8859-1, iso-8859-15, ou cp1252. Si vous pouvez poster des exemples d'autres caractères de problème, il devrait être possible de réduire cela plus bas.
comme l'inspection visuelle des caractères peut être trompeuse, vous aurez également besoin de regarder les octets sous-jacents: le § que vous voyez à l'écran peut être soit 0xa7 ou 0xc2a7, et qui va déterminer le type de conversion de jeu de caractères que vous avez à faire.
pouvez - vous supposer que toutes vos données ont été déformées exactement de la même manière - viennent de la même source et passé par la même séquence de transformations, de sorte que par exemple il n'y a pas un seul é dans votre texte, il est toujours ç? Si oui, le problème peut être résolu avec une séquence de jeu de caractères de conversions. Si vous pouvez être plus précis sur l'environnement dans lequel vous êtes et la base de données que vous utilisez, quelqu'un ici peut probablement vous dire comment effectuer la conversion.
autrement, si les caractères de problème ne se produisent que dans certains place dans vos données, vous devrez le prendre instance par instance, basé sur des hypothèses comme "aucun auteur n'a l'intention de mettre ç dans leur texte, donc chaque fois que vous le voyez, remplacer par ç". Cette dernière option est plus risquée, tout d'abord parce que ces suppositions sur les intentions des auteurs peuvent être fausses, ensuite parce que vous devrez repérer chaque caractère problématique vous-même, ce qui pourrait être impossible s'il y a trop de texte à inspecter visuellement ou s'il est écrit dans une langue ou une écriture un système qui vous est étranger.
suivez ces étapes avec Notepad++
1-copier le texte original
2-dans Notepad++, ouvrir un nouveau fichier, changer L'encodage - > choisir un encodage vous pensez que le texte original suit. Essayez aussi l'encodage "ANSI" car parfois les fichiers Unicode sont lus comme ANSI par certains programmes
3 - Coller
4-puis de convertir en Unicode en passant par le même menu: encodage - > "encodage en UTF-8" (Pas "Convertir en UTF-8") et espérons qu'il deviendra lisible
les étapes ci-dessus s'appliquent à la plupart des langues. Vous avez juste besoin de deviner l'encodage original Avant de coller dans le notepad++, puis convertir à travers le même menu à un encodage basé sur Unicode alternative pour voir si les choses deviennent lisibles.
la plupart des langues existent sous deux formes d'encodage: 1 - l'ancienne forme héritée de L'ANSI (ASCII), seulement 8 bits, a été utilisée initialement par la plupart des ordinateurs. 8 bits seulement permis 256 possibilités, 128 d'entre eux où les caractères latins réguliers et de contrôle, les 128 derniers bits ont été lus différemment selon les paramètres de langue PC 2 - le nouveau standard Unicode (jusqu'à 32 bits) donne un code unique pour chaque caractère dans toutes les langues actuellement connues et beaucoup plus à venir. si un fichier est unicode, il doit être compris sur n'importe quel PC avec la police de la langue installée. Notez que même UTF-8 va jusqu'à 32 bits et est aussi large que UTF-16 et UTF-32 seulement il essaie de rester 8 bits avec caractères latins juste pour économiser de l'espace disque
quand vous voyez des séquences de caractères comme ç et é, c'est habituellement une indication qu'un fichier UTF-8 a été ouvert par un programme qui le lit comme ANSI (ou similaire). Caractères Unicode tels que ceux-ci:
U+00C2 lettre majuscule latine A avec circonflexe
U+00C3 majuscule latine lettre A avec tilde
U+0082 Pause autorisée ici
U+0083 pas de pause ici
ont tendance à apparaître dans Texte ANSI en raison de la stratégie des octets variables que UTF-8 utilise. Cette stratégie est très bien expliquée ici .
l'avantage pour vous est que l'apparence de ces caractères étranges rend relativement facile de trouver, et donc de remplacer, les instances de conversion incorrecte.
je crois que, puisque L'ANSI utilise toujours 1 octet par caractère, vous pouvez gérer cette situation avec une simple opération de recherche et de remplacement. Ou plus commodément, avec un programme qui inclut une table de correspondance entre les séquences offensantes et les caractères désirés, comme ceux-ci:
“ -> " # doit être une ouverture double bouclés citation
â€? -> " # doit être un double de fermeture bouclés citation
tout texte donné, en supposant qu'il soit en anglais, aura un nombre relativement petit de différents types de substitutions.
Espère que ça aide.
avec vim de la ligne de commande:
vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename
utiliser iconv-voir meilleure façon de convertir des fichiers texte entre les jeux de caractères?
si vous voyez des points d'interrogation dans le dossier ou si les accents sont déjà perdus, retourner à utf8 n'aidera pas votre cause. par exemple, si café est devenu café - changer l'encodage seul ne sera pas utile (et vous aurez besoin de données originales).
pouvez-vous coller un peu de texte ici, qui nous aidera à répondre à coup sûr.
sublime éditeur de texte, fichier -> rouvrir avec le codage -> choisir le bon encodage.
généralement, le codage est auto-détecté, mais si non, vous pouvez utiliser la méthode ci-dessus.
Il y a des programmes qui tentent de détecter l'encodage d'un fichier comme chardet . Ensuite, vous pouvez le convertir en un encodage différent en utilisant iconv. Mais cela exige que le texte original soit encore intact et qu'aucune information ne soit perdue (par exemple en supprimant les accents ou les lettres entières avec Accents).
j'ai trouvé un moyen simple pour auto-détecter l'encodage de fichier - changer le fichier à un fichier texte (sur un mac renommer l'extension de fichier en .txt) et faites-le glisser vers une fenêtre Mozilla Firefox (ou un fichier - > Ouvrir). Firefox détectera l'encodage - vous pouvez voir ce qu'il est venu avec sous la vue -> encodage de caractères.
j'ai changé L'encodage de mon fichier en utilisant TextMate une fois que j'ai connu l'encodage correct. Fichier -> Rouvrir en utilisant l'encodage et choisissez votre encodage. Puis Fichier -> Enregistrer sous et le changement le codage UTF-8 et les fins de ligne de LF (ou ce que vous voulez)
on OS X Synalyze It! vous permet d'Afficher des parties de votre fichier dans des encodages différents (tous pris en charge par la bibliothèque ICU). Une fois que vous savez quel est le codage source, vous pouvez copier le fichier entier (bytes) via presse-papiers et l'insérer dans un nouveau document où le codage cible (UTF-8 ou ce que vous voulez) est sélectionné.
très utile pour travailler avec UTF-8 ou d'autres représentations Unicode est UnicodeChecker
j'ai trouvé cette question en cherchant une solution à un problème de page de code que j'avais avec des caractères chinois, mais à la fin mon problème était juste un problème avec Windows ne les affichant pas correctement dans L'interface utilisateur.
dans le cas où quelqu'un d'autre a ce même problème, vous pouvez le corriger simplement en changeant le local dans windows à la Chine et puis de nouveau.
j'ai trouvé la solution ici:
Aussi upvoted Gabriel réponse en regardant les données dans notepad++ était ce bout de moi sur windows.