如何替换';%';至'\x';用Python

如何替换';%';至'\x';用Python,python,string,character-encoding,base64,Python,String,Character Encoding,Base64,我的目标是将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) -> Value

我的目标是将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"
미러스 엣지

对于代码的第二部分,请使用:

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

虽然这可以修复您的错误,但最好的解决方案是@kamae方法
replace
无法解码URL安全字符串。它只是将字符
%
替换为
\x
。 如果要解码URL安全字符串,应使用
urllib.unquote

import urllib
target = '%EB%AF%B8%EB%9F%AC%EC%8A%A4%20%EC%97%A3%EC%A7%80'
print urllib.unquote(target)

我认为您忽略了交互式Python的CLI和Python源代码之间的区别。在代码中实际执行的操作是将字符串中的“%”字符更改为“\x”字符

在Python的命令行中,您要做的是输入字符串,并在创建字符串时(当您按下enter键时)解释转义代码。然后,您的字符串是unicode,包含韩语字符的二进制表示形式


可能会对您有所帮助。

跳出斜杠:
替换('%','\\x')
,等等。您可以使用
'\\x'
字符串文字而不是
r'\x'
谢谢您提供的最佳解决方案。是的,我没有接到通知。谢谢你告诉我。
import urllib
target = '%EB%AF%B8%EB%9F%AC%EC%8A%A4%20%EC%97%A3%EC%A7%80'
print urllib.unquote(target)