Dans un fichier texte, il y a une chaîne "Je n'aime pas ça".
Cependant, quand je le lis dans une chaîne, cela devient "Je ne \ xe2 \ x80 \ x98t comme ça". Je comprends que \ u2018 est la représentation unicode de "'". j'utilise
f1 = open (file1, "r")
text = f1.read()
commande pour faire la lecture.
Maintenant, est-il possible de lire la chaîne de telle manière que lorsqu'elle est lue dans la chaîne, c'est "Je n'aime pas ça", au lieu de "Je ne \ xe2 \ x80 \ x98t comme ça comme ça"?
Deuxième édition: j'ai vu certaines personnes utiliser la cartographie pour résoudre ce problème, mais vraiment, n'y a-t-il pas de conversion intégrée qui effectue ce type de conversion ANSI en Unicode (et vice versa)?
Réponses:
Réf: http://docs.python.org/howto/unicode
La lecture d'Unicode à partir d'un fichier est donc simple:
Il est également possible d'ouvrir des fichiers en mode mise à jour, permettant à la fois la lecture et l'écriture:
EDIT : Je suppose que votre objectif est simplement de pouvoir lire correctement le fichier dans une chaîne en Python. Si vous essayez de convertir une chaîne ASCII à partir d'Unicode, il n'y a vraiment aucun moyen direct de le faire, car les caractères Unicode n'existeront pas nécessairement en ASCII.
Si vous essayez de convertir une chaîne ASCII, essayez l'une des méthodes suivantes:
Remplacez les caractères Unicode spécifiques par des équivalents ASCII, si vous ne cherchez à gérer que quelques cas particuliers tels que cet exemple particulier
Utilisez le
unicodedata
modulenormalize()
et lastring.encode()
méthode pour convertir au mieux votre équivalent ASCII le plus proche (Réf https://web.archive.org/web/20090228203858/http://techxplorer.com/2006/07/18/converting- unicode à ascii en utilisant python ):la source
codecs
Le module ne gère pas correctement le mode de retour à la ligne universel. Utilisezio.open()
plutôt sur Python 2.7+ (il est intégréopen()
à Python 3).Il y a quelques points à considérer.
Un caractère \ u2018 peut apparaître uniquement comme un fragment de représentation d'une chaîne Unicode en Python, par exemple si vous écrivez:
Maintenant, si vous voulez simplement imprimer joliment la chaîne unicode, utilisez simplement la
encode
méthode unicode :Pour vous assurer que chaque ligne de n'importe quel fichier sera lue comme unicode, vous feriez mieux d'utiliser la
codecs.open
fonction au lieu de justeopen
, ce qui vous permet de spécifier le codage du fichier:la source
Mais c'est vraiment "je n'aime pas ça" et non "je n'aime pas ça". Le caractère u '\ u2018' est un caractère complètement différent de "'" (et, visuellement, devrait correspondre davantage à' `').
Si vous essayez de convertir unicode encodé en ASCII brut, vous pouvez peut-être conserver un mappage de ponctuation Unicode que vous souhaitez traduire en ASCII.
Cependant, il y a énormément de caractères de ponctuation en Unicode , mais je suppose que vous pouvez compter sur seulement quelques-uns d'entre eux utilisés par l'application qui crée les documents que vous lisez.
la source
Il est également possible de lire un fichier texte encodé à l'aide de la méthode de lecture python 3:
Avec cette variante, il n'est pas nécessaire d'importer des bibliothèques supplémentaires
la source
En laissant de côté le fait que votre fichier texte est cassé (U + 2018 est un guillemet gauche, pas une apostrophe): iconv peut être utilisé pour translittérer des caractères unicode en ascii.
Vous devrez google pour "iconvcodec", car le module ne semble plus être pris en charge et je ne trouve pas de page d'accueil canonique pour cela.
Vous pouvez également utiliser l'
iconv
utilitaire de ligne de commande pour nettoyer votre fichier:la source
Il est possible que vous ayez une chaîne non-unicode avec des caractères d'échappement unicode, par exemple:
Cela m'est arrivé une fois auparavant. Vous pouvez utiliser un
unicode_escape
codec pour décoder la chaîne en unicode, puis l'encoder dans le format de votre choix:la source
C'est la manière Pythons de vous montrer des chaînes encodées en unicode. Mais je pense que vous devriez pouvoir imprimer la chaîne à l'écran ou l'écrire dans un nouveau fichier sans aucun problème.
la source
En fait, U + 2018 est la représentation Unicode du caractère spécial '. Si vous le souhaitez, vous pouvez convertir les instances de ce caractère en U + 0027 avec ce code:
De plus, qu'utilisez-vous pour écrire le fichier?
f1.read()
devrait retourner une chaîne qui ressemble à ceci:S'il renvoie cette chaîne, le fichier est mal écrit:
la source