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 un bytes
objet, utilisez simplementtext.decode('utf-8')
unicode
de Python2 est équivalent à str
en Python3, vous pouvez donc également écrire:
str(text, 'utf-8')
si tu préfères.
str
est unicode, c'est-à-dire. il est « décodé » donc il n'a pas de sens d'appeler decode
à ce
str(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:
Tout le texte est Unicode; cependant Unicode codé est représenté sous forme de données binaires
Si vous voulez vous assurer que vous sortez utf-8, voici un exemple de cette page sur unicode en 3.0 :
b'\x80abc'.decode("utf-8", "strict")
Pour contourner le problème, j'utilise ceci:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
.
unicode = str
car cela n'échouera ni dans 2 ni dans 3
from 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.
example = 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\\uD83D\\uDE0D\\uD83D\\uDE0D\\u2764\\uFE0F Present Moment Caf\\u00E8 in St.Augustine\\u2764\\uFE0F\\u2764\\uFE0F '
import codecs
new_str = codecs.unicode_escape_decode(example)[0]
print(new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\ud83d\ude0d\ud83d\ude0d❤️ Present Moment Cafè in St.Augustine❤️❤️ '
new_new_str = new_str.encode('utf-16', 'surrogatepass').decode('utf-16')
print(new_new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream😍😍❤️ Present Moment Cafè in St.Augustine❤️❤️ '
Dans un programme Python 2 que j'ai utilisé pendant de nombreuses années, il y avait cette ligne:
ocd[i].namn=unicode(a[:b], 'utf-8')
Cela ne fonctionnait pas dans Python 3.
Cependant, le programme s'est avéré fonctionner avec:
ocd[i].namn=a[:b]
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".
le moyen le plus simple en python 3.x
text = "hi , I'm text"
text.encode('utf-8')