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.
>>> 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.
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')
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
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 = "ボールト"
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")
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
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
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')
ñ