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 textc'est un bytesobjet, utilisez simplementtext.decode('utf-8')
unicodede Python2 est équivalent à stren Python3, vous pouvez donc également écrire:
str(text, 'utf-8')
si tu préfères.
strest 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 = strcar cela n'échouera ni dans 2 ni dans 3
from six import u as unicodeque 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')