web-dev-qa-db-fra.com

Comment convertir une chaîne en utf-8 dans Python

J'ai un navigateur qui envoie des caractères utf-8 à mon serveur Python, mais lorsque je le récupère à partir de la chaîne de requête, le codage renvoyé par Python est ASCII. Comment puis-je convertir la chaîne de caractères au format utf-8?

REMARQUE: La chaîne transmise par le Web est déjà encodée en UTF-8. Je souhaite simplement que Python soit traitée comme une UTF-8 et non en ASCII.

174
Bin Chen
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)

^ Il s’agit de la différence entre une chaîne d’octets (chaîne_de_plaine) et une chaîne unicode.

>>> s = "Hello!"
>>> u = unicode(s, "utf-8")

^ Conversion en unicode et spécification du codage.

240
user225312

Si les méthodes ci-dessus ne fonctionnent pas, vous pouvez également indiquer à Python d'ignorer les parties d'une chaîne qu'il ne peut pas convertir en utf-8:

stringnamehere.decode('utf-8', 'ignore')
66
duhaime

C'est peut-être un peu exagéré, mais quand je travaille avec ascii et unicode dans les mêmes fichiers, répéter le décodage peut être pénible, voici ce que j'utilise:

def make_unicode(input):
    if type(input) != unicode:
        input =  input.decode('utf-8')
        return input
    else:
        return input
20
Blueswannabe

Ajout de la ligne suivante en haut de votre fichier .py:

# -*- coding: utf-8 -*-

vous permet d’encoder des chaînes directement dans votre script, comme ceci:

utfstr = "ボールト"
14
Ken

Si je vous ai bien compris, vous avez une chaîne d'octets codée en utf-8 dans votre code.

La conversion d'une chaîne d'octets en chaîne unicode est appelée décodage (unicode -> chaîne d'octets codée).

Vous faites cela en utilisant la fonction nicode ou la méthode décodage . Soit:

unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")

Ou:

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
13
codeape
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
8
Willem

Dans Python3.6, ils ne possèdent pas de méthode unicode () intégrée. Les chaînes sont déjà stockées au format Unicode par défaut et aucune conversion n'est requise. Exemple:

my_str = "\u221a25"
print(my_str)
>>> √25
6
Zld Productions

Traduisez avec ord () et unichar (). Chaque caractère unicode a un numéro associé, quelque chose comme un index. Ainsi, Python dispose de quelques méthodes pour convertir un caractère en caractère. Inconvénient est un exemple. J'espère que ça peut aider.

>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
3
Joe9008