私はこのような複数の六角値を必要とする文字で文字列を変換しようとしていますに\ xHH六角値を持つ文字列:Pythonの3 - Unicodeの
'Mahou Shoujo Madoka\xe2\x98\x85Magica'
そのUnicode表現へ:
'Mahou Shoujo Madoka★Magica'
文字列を出力すると、各16進値を別々に評価しようとします。したがって、デフォルトではこれは次のようになります。
x = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
print(x)
Mahou Shoujo MadokaâMagica
z = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
x = binascii.unhexlify(binascii.hexlify(z.encode('utf-8'))).decode('utf-8')
print('x:', x)
x: Mahou Shoujo MadokaâMagica
そしていくつかの他、それらのどれも働いた:
x = 'Mahou Shoujo Madoka\xe2\x98\x85Magica'
z = x.encode('utf-8')
print('z:', z)
y = z.decode('utf-8')
print('y:', y)
z: b'Mahou Shoujo Madoka\xc3\xa2\xc2\x98\xc2\x85Magica'
y: Mahou Shoujo MadokaâMagica
Python: Convert Unicode-Hex-String to Unicode:などBest way to convert string to bytes in Python 3?など、いくつかの他のStackOverflowの答えを、試してみました。私が見つけた結果のほとんどはdouble backslash problemの人でしたが、私の正確な問題はなかった。
str.encodeを実行すると、最初の試みでzとxの違いなどのバイナリに余分な値が追加されているように見えます。
だから私は、手動でバイナリに文字列の文字を入力しようとした:
x = b'Mahou Shoujo Madoka\xe2\x98\x85Magica'
x.decode('utf-8')
'Mahou Shoujo Madoka★Magica'
、それが働きました。しかし、文字列からバイナリに変換する方法を見つけることができませんでした。どこが間違っていますか?
文字列を変数に代入するには、上記を 's = b" \ xe2 \ x98 \ x85 ".decode(" utf8 ")'に短縮することができます。 – Jens
@Jensあなたはそれを 's = '★''に短縮することができましたが、それは質問のポイントではありませんでした。 –