2012-06-24 7 views
10

Je reçois une chaîne à partir d'une fonction représentée comme u'\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0', mais pour la traiter, j'ai besoin qu'elle soit octetstring (comme '\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0').Convertir une chaîne unicode en chaîne d'octets

Comment le convertir sans modifications?

Ma meilleure estimation à ce jour est de prendre s.encode('unicode_escape'), qui retournera '\\xd0\\xbc\\xd0\\xb0\\xd1\\x80\\xd0\\xba\\xd0\\xb0' et processus tous les 5 caractères afin que « \ xd0 » devient un caractère représenté comme « \ xd0 ».

Répondre

22

ISO 8859-1 (alias Latin-1) mappe les 256 premiers points de code Unicode à leurs valeurs d'octets.

>>> u'\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0'.encode('latin-1') 
'\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0' 
+1

C'est intelligent. Ma première option serait 'octets (carte (ord, x))' mais il peut être beaucoup plus lent ... – JBernardo

+0

a confirmé que cela produit le résultat souhaité – bryce

+0

@JBernardo Cela ne fonctionne que dans python 3; ce n'est pas clair à partir du texte, mais les chances sont que l'OP est sur python 2. – zwol

Questions connexes