J'ai utilisé ceci:
u = unicode(text, 'utf-8')
Mais obtenir une erreur avec Python 3 (ou ... peut-être que j'ai juste oublié d'inclure quelque chose):
NameError: global name 'unicode' is not defined
Je vous remercie.
J'ai utilisé ceci:
u = unicode(text, 'utf-8')
Mais obtenir une erreur avec Python 3 (ou ... peut-être que j'ai juste oublié d'inclure quelque chose):
NameError: global name 'unicode' is not defined
Je vous remercie.
Réponses:
Les chaînes littérales sont unicode par défaut dans Python3.
En supposant que
text
c'est unbytes
objet, utilisez simplementtext.decode('utf-8')
unicode
de Python2 est équivalent àstr
en Python3, vous pouvez donc également écrire:si tu préfères.
la source
str
est unicode, c'est-à-dire. il est « décodé » donc il n'a pas de sens d'appelerdecode
à cestr(text, 'utf-8')
, le texte doit être une chaîne binaire. egstr(b'this is a binary', 'utf-8')
Les nouveautés de Python 3.0 indiquent:
Si vous voulez vous assurer que vous sortez utf-8, voici un exemple de cette page sur unicode en 3.0 :
la source
Pour contourner le problème, j'utilise ceci:
la source
try: unicode = str; except: pass
.unicode = str
car cela n'échouera ni dans 2 ni dans 3from six import u as unicode
que je préférerais simplement parce que c'est plus auto-documenté (puisque six est une couche de compatibilité 2/3) queunicode = str
C'est ainsi que j'ai résolu mon problème pour convertir des caractères comme \ uFE0F, \ u000A, etc. Et aussi des emojis encodés avec 16 octets.
la source
Dans un programme Python 2 que j'ai utilisé pendant de nombreuses années, il y avait cette ligne:
Cela ne fonctionnait pas dans Python 3.
Cependant, le programme s'est avéré fonctionner avec:
Je ne me souviens pas pourquoi j'ai mis unicode là en premier lieu, mais je pense que c'était parce que le nom peut contenir des lettres suédoises åäöÅÄÖ. Mais même ils fonctionnent sans "unicode".
la source
le moyen le plus simple en python 3.x
la source