Question

J'ai un navigateur qui envoie des caractères utf-8 à mon serveur Python, mais quand je le récupérer à partir de la chaîne de requête, l'encodage Python est que les rendements ASCII. Comment puis-je convertir la chaîne simple pour utf-8?

NOTE: La chaîne passée du web est déjà UTF-8 codé, je veux juste faire Python pour le traiter comme UTF-8 non ASCII

.
Était-ce utile?

La solution

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

^ Ceci est la différence entre une chaîne d'octets (de plain_string) et une chaîne de caractères unicode.

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

^ Conversion en unicode et en spécifiant l'encodage.

Autres conseils

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

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

peut-être un peu exagéré, mais quand je travaille avec ascii et unicode dans la même fichiers, decode répétition peut être une douleur, ce que j'utilise:

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

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

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

vous permet de chaînes encoder directement dans votre script, comme ceci:

utfstr = "ボールト"

Si je vous comprends bien, vous avez une chaîne d'octets encodée utf-8 dans votre code.

Conversion d'une chaîne d'octets à une chaîne de caractères unicode est connu sous le nom de décodage (unicode ->-chaîne d'octets est codant).

Vous faites cela en utilisant la fonction unicode ou decode méthode. Soit:

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

Ou:

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

En Python 3.6, ils ne disposent pas d'une méthode intégrée unicode (). Les chaînes sont déjà stockées sous forme unicode par défaut et aucune conversion est nécessaire. Exemple:

my_str = "\u221a25"
print(my_str)
>>> √25

Traduire en ord () et unichar (). Chaque unicode omble chevalier ont un numéro associée unique, quelque chose comme un indice. Donc, Python ont quelques méthodes pour traduire entre char et son numéro. Le seul inconvénient est un exemple ñ. Espérons que cela peut aider.

>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top