2012-06-24 30 views
10

u'\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0'のように表される関数から文字列を取得しますが、それを処理するには、バイト文字列('\xd0\xbc\xd0\xb0\xd1\x80\xd0\xba\xd0\xb0'など)が必要です。ユニコード文字列をバイト文字列に変換する

変更せずに変換するにはどうすればよいですか?

これまでのところ、s.encode('unicode_escape')を返すと、'\\xd0\\xbc\\xd0\\xb0\\xd1\\x80\\xd0\\xba\\xd0\\xb0'が返され、5文字ごとに処理され、 '\ xd0'は '\ xd0'として表される1文字になります。

答えて

22

ISO 8859-1(別名Latin-1)は、最初の256個のUnicodeコードポイントをバイト値にマッピングします。

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

これはスマートです。私の最初のオプションは 'bytes(map(ord、x))'ですが、もっと遅くなる可能性があります。 – JBernardo

+0

これが正しい結果を返します – bryce

+0

@JBernardoこれはPython 3でのみ動作します。テキストからは分かりませんが、OPはPython 2にあります。 – zwol