238 votes

Comment convertir une chaîne de caractères en utf-8 en 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, l'encodage que Python renvoie est ASCII. Comment puis-je convertir la chaîne en clair en utf-8 ?

NOTE : La chaîne passée depuis le web est déjà encodée en UTF-8, je veux juste que Python la traite comme UTF-8 et non ASCII.

1 votes

0 votes

Je pense qu'un meilleur titre serait Comment convertir une chaîne en unicode sans traduction ?

3 votes

En 2018, python 3 si vous obtenez l'erreur de décodage ascii faire "some_string".encode('utf-8').decode('utf-8')

13voto

Will Points 689
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')

11voto

Zld Productions Points 98

Dans Python 3.6, elles ne disposent pas d'une méthode unicode() intégrée. Les chaînes de caractères sont déjà stockées en unicode par défaut et aucune conversion n'est nécessaire. Exemple :

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

5voto

Joe9008 Points 160

Traduisez avec ord() et unichar(). Chaque caractère unicode est associé à un numéro, un peu comme un index. Python dispose donc de plusieurs méthodes pour traduire un caractère en son numéro. L'inconvénient est un exemple de ñ. J'espère que cela pourra vous aider.

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

3voto

shioko Points 88
  • D'abord, str en Python est représentée par Unicode .
  • Deuxièmement, UTF-8 est une norme d'encodage pour coder Unicode à la chaîne bytes . Il existe de nombreuses normes d'encodage (par ex. UTF-16 , ASCII , SHIFT-JIS etc.).

Lorsque le client envoie des données à votre serveur et qu'il utilise UTF-8 ils envoient un groupe de bytes pas str .

Vous avez reçu un str parce que la "bibliothèque" ou le "framework" que vous utilisez a implicitement converti une partie aléatoire bytes a str .

Sous le capot, il y a juste un tas de bytes . Il suffit de demander à la "bibliothèque" de vous donner le contenu demandé en bytes et vous vous occuperez du décodage vous-même (si la bibliothèque ne peut pas vous le donner, c'est qu'elle essaie de faire de la magie noire et vous ne devriez pas l'utiliser).

  • Décoder UTF-8 encodé bytes a str : bs.decode('utf-8')
  • Encoder str a UTF-8 bytes : s.encode('utf-8')

0voto

Kevin Points 1

Vous pouvez également le faire :

from unidecode import unidecode
unidecode(yourStringtoDecode)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X