web-dev-qa-db-fra.com

Comment faire une chaîne unicode avec python3

J'ai utilisé ceci:

u = unicode(text, 'utf-8')

Mais obtenir une erreur avec Python 3 (ou ... j'ai peut-être oublié d'inclure quelque chose):

NameError: global name 'unicode' is not defined

Je vous remercie.

90
cnd

Les chaînes littérales sont unicode par défaut en Python3.

En supposant que text soit un objet bytes, utilisez simplement text.decode('utf-8')

unicode de Python2 est équivalent à str en Python3, vous pouvez donc écrire aussi:

str(text, 'utf-8')

si tu préfères.

122
John La Rooy

Pour contourner le problème, j'ai utilisé ceci:

# Fix Python 2.x.
try:
    UNICODE_EXISTS = bool(type(unicode))
except NameError:
    unicode = lambda s: str(s)
8
magicrebirth

Quoi de neuf à Python 3. dit:

Tout le texte est Unicode; toutefois, Unicode codé est représenté sous forme de données binaires

Si vous voulez vous assurer de sortir utf-8, voici un exemple de cette page sur nicode dans la version 3. :

b'\x80abc'.decode("utf-8", "strict")
8
Tremmors

la manière la plus simple python 3.x

text = "hi , I'm text"
text.encode('utf-8')
0
mosi_kha

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 l’unicode là-bas, mais je pense que c’est parce que son nom peut contenir des lettres suédoises åäöÅÄÖ. Mais même ils fonctionnent sans "unicode".

0
Per Persson

C’est ainsi que j’ai résolu mon problème en convertissant des caractères tels que\uFFE0,\u000A, etc. Et aussi des emojis codé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❤️❤️ '
0
Ilyas