Question

Comment convertir une chaîne Unicode (contenant des caractères supplémentaires tels que & # 163; $, etc.) en chaîne Python?

Était-ce utile?

La solution

title = u"Klüft skräms inför på fédéral électoral große"
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'

Autres conseils

Vous pouvez utiliser l'encodage en ASCII si vous n'avez pas besoin de traduire les caractères non-ASCII:

>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>
>>> text=u'abcd'
>>> str(text)
'abcd'

Si la chaîne ne contient que des caractères ascii.

Si vous avez une chaîne Unicode et que vous souhaitez l'écrire dans un fichier ou un autre formulaire sérialisé, vous devez d'abord l'encoder dans une représentation particulière pouvant être stockée. Il existe plusieurs codages Unicode courants, tels que UTF-16 (utilise deux octets pour la plupart des caractères Unicode) ou UTF-8 (1-4 octets / codepoint selon le caractère), etc. Pour convertir cette chaîne en un codage particulier, vous devez peut utiliser:

>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'

Cette chaîne d'octets brute peut être écrite dans un fichier. Cependant, notez que lors de la lecture, vous devez savoir dans quel encodage il se trouve et le décoder à l'aide du même encodage.

Lors de l'écriture dans des fichiers, vous pouvez supprimer ce processus de codage / décodage manuel à l'aide des codecs. module. Ainsi, pour ouvrir un fichier qui code toutes les chaînes Unicode en UTF-8 , utilisez:

import codecs
f = codecs.open('path/to/file.txt','w','utf8')
f.write(my_unicode_string)  # Stored on disk as UTF-8

Notez que tout autre utilisateur utilisant ces fichiers doit comprendre le codage de ce fichier s'il veut les lire. Si vous êtes le seul à lire / écrire, ce n’est pas un problème, sinon, assurez-vous d’écrire sous une forme compréhensible pour tout le monde qui utilise les fichiers.

En Python 3, cette forme d'accès aux fichiers est la valeur par défaut. La fonction intégrée open utilise un paramètre d'encodage et est toujours traduite en / à partir de chaînes Unicode (l'objet chaîne par défaut dans Python 3) pour les fichiers ouverts. en mode texte.

Voici un exemple:

>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'

Eh bien, si vous êtes prêt / prêt à passer à Python 3 (ce qui n'est peut-être pas dû à l'incompatibilité avec le code Python 2), vous n'avez pas à convertir. tout le texte de Python 3 est représenté par des chaînes Unicode, ce qui signifie également que la syntaxe u'<text>' n'est plus utilisée. Vous avez également ce qui sont en fait des chaînes d'octets, utilisées pour représenter des données (qui peuvent être une chaîne codée).

http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit

(Bien sûr, si vous utilisez actuellement Python 3, le problème est probablement lié à la façon dont vous essayez d'enregistrer le texte dans un fichier.)

Voici un exemple de code

import unicodedata    
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top