2012-06-24 26 views
10

Ricevo una stringa da una funzione che è rappresentata come u'\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0', ma per elaborarla ho bisogno che sia testata (come '\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0').Converti stringa unicode in stringa di byte

Come posso convertirlo senza modifiche?

La mia ipotesi migliore finora è quello di prendere s.encode('unicode_escape'), che restituirà '\\xd0\\xbc\\xd0\\xb0\\xd1\\x80\\xd0\\xba\\xd0\\xb0' e di processo ogni 5 caratteri in modo che '\ xd0' diventa un carattere rappresentato come '\ xd0'.

risposta

22

ISO 8859-1 (alias Latin-1) associa i primi 256 codepoint Unicode ai rispettivi valori di byte.

>>> 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

Questo è intelligente. La mia prima opzione sarebbe 'bytes (map (ord, x))' ma potrebbe essere molto più lenta ... – JBernardo

+0

confermato produce il risultato desiderato – bryce

+0

@JBernardo Funziona solo in python 3; non è chiaro dal testo, ma le probabilità sono che l'OP sia su python 2. – zwol