2

私の目的は、base64 エンコーディングの「%EB」文字列を「\xEB」に変換することです。しかし、やってみると、難しくて、string.replace と re.sub の両方では実現できないことがわかりました。

私のコードは以下のように失敗しました:

target = '%EB%AF%B8%EB%9F%AC%EC%8A%A4%20%EC%97%A3%EC%A7%80'

target.replace('%','\x')
-> ValueError: invalid \x escape

re.sub('%','\x',target)
-> ValueError: invalid \x escape

更新しました:

コメントありがとうございます。'\x' と r'\x' を試しましたが、解決できなかったようです。

例えば、

target = '%EB%AF%B8%EB%9F%AC%EC%8A%A4%20%EC%97%A3%EC%A7%80'
converted1 = target.replace('%',r'\x')
converted2 = target.replace('%','\\x')
converted1
-> '\\xEB\\xAF\\xB8\\xEB\\x9F\\xAC\\xEC\\x8A\\xA4\\x20\\xEC\\x97\\xA3\\xEC\\xA7\\x80'
converted2
-> '\\xEB\\xAF\\xB8\\xEB\\x9F\\xAC\\xEC\\x8A\\xA4\\x20\\xEC\\x97\\xA3\\xEC\\xA7\\x80'

結果:

print converted1
\xEB\xAF\xB8\xEB\x9F\xAC\xEC\x8A\xA4\x20\xEC\x97\xA3\xEC\xA7\x80
print converted2
\xEB\xAF\xB8\xEB\x9F\xAC\xEC\x8A\xA4\x20\xEC\x97\xA3\xEC\xA7\x80

私がしたいのは:

print "\xEB\xAF\xB8\xEB\x9F\xAC\xEC\x8A\xA4\x20\xEC\x97\xA3\xEC\xA7\x80"
미러스 엣지
4

3 に答える 3

6
>>> target = '%EB%AF%B8%EB%9F%AC%EC%8A%A4%20%EC%97%A3%EC%A7%80'
>>> target.replace('%',r'\x')
'xEBxAFxB8xEBx9FxACxECx8AxA4x20xECx97xA3xECxA7x80'

Python で '\x' が無効なのはなぜですか?

コードの 2 番目の部分では、次を使用します。

print target.replace('%',r'\x').decode('string-escape')

これでエラーは修正されますが、最良の解決策は@kamaeによるものです

于 2013-06-13T07:48:40.153 に答える