Convertissez une chaîne Unicode en une chaîne en Python (contenant des symboles supplémentaires)

Comment convertir une chaîne Unicode (contenant des caractères supplémentaires comme £ $, etc.) dans une chaîne de Python?

418
demandé sur jfs 2009-07-30 19:41:11
la source

8 ответов

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'
510
répondu Sorantis 2009-07-30 19:44:32
la source

vous pouvez utiliser encode pour 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???????'
>>>
278
répondu Ferran 2014-01-09 08:19:09
la source
>>> text=u'abcd'
>>> str(text)
'abcd'

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

106
répondu igco 2017-01-05 18:48:56
la source

Si vous avez une chaîne Unicode, et vous voulez écrire cela dans un fichier, ou d'autres sérialisés formulaire, vous devez d'abord coder dans une représentation particulière qui peut être stockée. Il existe plusieurs encodages 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 pouvez utiliser:

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

ce brut chaîne d'octets peuvent être écrites dans un fichier. Cependant, notez que lorsque vous le relisez, vous devez savoir dans quel encodage il se trouve et le décoder en utilisant ce même encodage.

en écrivant aux fichiers, vous pouvez vous débarrasser de ce processus manuel d'encodage/décodage en utilisant le module codecs . Ainsi, pour ouvrir un fichier qui Code toutes les chaînes Unicode dans 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 ce qui utilise ces fichiers doivent comprendre ce que l'encodage du fichier est s'ils veulent lire. Si vous êtes le seul qui fait la lecture / écriture ce n'est pas un problème, sinon assurez-vous que vous écrivez dans une forme compréhensible par quoi que ce soit d'autre utilise les fichiers.

en Python 3, Cette forme d'accès au fichier est par défaut, et la fonction intégrée open prendra un paramètre d'encodage et traduira toujours vers / depuis les chaînes Unicode (l'objet de chaîne par défaut en Python 3) pour les fichiers ouvert en mode texte.

105
répondu Brian 2014-01-09 08:15:17
la source

voici un exemple:

>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
51
répondu Bastien Léonard 2009-07-30 19:46:26
la source

Eh bien, si vous êtes prêt (e) à passer à Python 3 (ce qui n'est peut-être pas dû à l'incompatibilité à l'envers avec un code Python 2), vous n'avez pas à effectuer de conversion; tout le texte en Python 3 est représenté avec des chaînes Unicode, ce qui signifie aussi qu'il n'y a plus d'utilisation de la syntaxe u'<text>' . Vous avez aussi ce sont, en effet, les chaînes d'octets, qui sont utilisés pour représenter des données (qui peut ê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, alors le problème est probablement lié à la façon dont vous tentez de sauvegarder le texte dans un fichier.)

3
répondu JAB 2009-07-30 20:14:33
la source

voici un exemple de code

import unicodedata    
raw_text = u"here $%6757 dfgdfg"
convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore')
2
répondu Gihan Chathuranga 2016-12-19 10:59:44
la source
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
-1
répondu Arvind Pal 2018-08-10 09:27:54
la source

Autres questions sur python string unicode type-conversion