Comment faire pour convertir un fichier au format Unicode en ASCII à l'aide de Python?
- Je utiliser un outil 3ème partie qui génère un fichier au format Unicode. Cependant, je préfère que ce soit en ASCII. L'outil n'a pas de paramètres pour modifier le format de fichier.
Quel est le meilleur moyen de convertir la totalité du format de fichier à l'aide de Python?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez convertir le fichier assez facilement en utilisant simplement le
unicode
fonction, mais vous pourrez rencontrer des problèmes avec les caractères Unicode sans un droit équivalent ASCII.Ce blog recommande la
unicodedata
module, qui semble prendre soin d'à peu près la conversion de caractères sans correspondant directe valeurs ASCII, par exempleest habituellement converti à
qui est assez mauvais. Cependant, l'utilisation de la
unicodedata
module, le résultat peut être beaucoup plus proche du texte original:unicodedata
pour le cas spécial de la hanche: effbot.org/zone/unicode-convert.htmJe pense que c'est un problème plus profond que vous ne le réalisez. Il suffit de changer le fichier à partir de l'Unicode en ASCII est facile, toutefois, obtenir tous les caractères Unicode à se traduire par un ASCII homologues (nombre de lettres qui ne sont pas disponibles dans les deux codages) en est une autre.
Ce Python Unicode tutoriel peut vous donner une meilleure idée de ce qui se passe pour les chaînes Unicode qui sont convertis en ASCII: http://www.reportlab.com/i18n/python_unicode_tutorial.html
Voici un bon devis à partir du site:
Par la manière, c'est une commande linux
iconv
pour faire ce genre de travail.Voici quelques simples (et stupide) code pour faire de l'encodage de la traduction. Je suppose (mais vous ne devriez pas) que le fichier d'entrée est au format UTF-16 (Windows appelle simplement "Unicode").
Notez que cela ne fonctionne pas si il existe des caractères dans le fichier Unicode qui ne sont pas aussi des caractères ASCII. Vous pouvez effectuer les opérations suivantes pour activer les caractères non reconnus en '?'s:
Découvrez les docs de plus simple choix. Si vous avez besoin de faire quelque chose de plus sophistiqué, vous pouvez consulter L'UNICODE Marteau à l'Python Cookbook.
Comme ceci:
Noter, cependant, que cela échouer avec un
UnicodeDecodeError
exception s'il y a des caractères qui ne peuvent pas être convertis au format ASCII.EDIT: Comme Pete Karl viens de le souligner, il n'y a pas de one-to-one mapping à partir d'Unicode en ASCII. De sorte que certains caractères ne peuvent tout simplement pas être converti en une information de préservation de la sorte. En outre, la norme ASCII est plus ou moins un sous-ensemble de l'UTF-8, donc vous n'avez pas vraiment besoin de faire du décodage.
Pour mon problème lorsque je voulais juste ignorer les caractères Non ascii, et juste à la sortie de données ascii de sortie, ci-dessous la solution a très bien fonctionné:
Il est important de noter qu'il n'y a pas de "Unicode" format de fichier. Unicode peuvent être encodés à octets de plusieurs façons différentes. Plus couramment UTF-8 ou UTF-16. Vous aurez besoin de savoir quel est votre outil de la 3e partie est sortie. Une fois que vous savez que la conversion entre les différents encodages est assez facile:
Comme indiqué dans les autres réponses, vous allez probablement vouloir fournir un gestionnaire d'erreur pour la méthode encode. À l'aide de "remplacement" comme le gestionnaire d'erreur est simple, mais mangle votre texte s'il contient des caractères qui ne peuvent pas être représenté en ASCII.
Que d'autres affiches ont noté, l'ASCII est un sous-ensemble de la norme unicode.
Toutefois, si vous:
Alors l'exemple ci-dessous montre comment le faire: