带十六进制字符串的python更改\u0026为&;
我有这样一个字符串:带十六进制字符串的python更改\u0026为&;,python,hex,Python,Hex,我有这样一个字符串: downloadFile":"/myportal/ABC/35/audio/182/audio?Id=996\u0026stepNo=0\u0026resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav 我需要将\u0026(十六进制)更改为& 我甚至试过这个--> 当谈到URL时,它不起作用,请帮个忙并使用urllib,这里是您需要的 如果它是Python2.x,请使用import urllib和urllib
downloadFile":"/myportal/ABC/35/audio/182/audio?Id=996\u0026stepNo=0\u0026resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav
我需要将\u0026(十六进制)更改为&
我甚至试过这个-->
当谈到URL时,它不起作用,请帮个忙并使用
urllib
,这里是您需要的
如果它是Python2.x,请使用
import urllib
和urllib.unquote()
试试这段代码
它很好用
downloadFile ="/myportal/ABC/35/audio/182/audio?Id=996\u0026stepNo=0\u0026resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav"
print(downloadFile.replace("\u0026","&"))
输出:
/myportal/ABC/35/audio/182/audio?Id=996&stepNo=0&resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav
也许您可以提供抛出的错误,但是从我看到的情况来看,下载文件后,:冒号上似乎有“引号”,这可能会导致错误,现在您可以使用反斜杠()将其转义,如下所示:
yourVar = "downloadFile\":\"/myportal/ABC/35/audio/182/audio?Id=996\u0026stepNo=0\u0026resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav"
yourVar.replace("\u0026","&")
从我的尝试来看,这应该没问题
或者,您可以使用“单引号”定义变量,因为这样可以允许当前字符串工作,因为冒号周围的“双引号”将被忽略:
yourVar = 'downloadFile":"/myportal/ABC/35/audio/182/audio?Id=996\u0026stepNo=0\u0026resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav'
yourVar.replace("\u0026","&")
这应该很好用。
如果问题仍然存在,请发布您运行的内容和收到的错误,我一定会进一步调查
有一个好的:)正如我的评论所说,我猜“\u0026”是一个转义字符串 也就是说,真正的输入应该是
a = "\\u0026"
使用双反斜杠输入真实的“\”
然后,我们可以使用json.loads
作为re.escape
的复杂反向函数,例如:
import json
json.loads("{\"downloadFile\":\"/myportal/ABC/35/audio/182/audio?Id=996\\u0026stepNo=0\\u0026resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav\"}")
# output:
# {'downloadFile': '/myportal/ABC/35/audio/182/audio?Id=996&stepNo=0&resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav'}
或者将其包装成函数:
def deescape(escaped):
return str(json.loads("{\"s\":\"" + escaped + "\"}"))[7 : -2]
deescape("\\u0026") # return '&'
更新:如果转义的包含“:”,则此解决方案不适用。真正的解决办法是:
没有起作用唯一对我起作用的是使用-->\u0026双音符\
myStr.replace("\\u0026","&")
请展示你在这方面的努力。使用相同的代码,我得到了正确的结果。我猜原始输入类似于a=“\\u0026”
,用两个反斜杠输入一个实“\”,OP要求使用反向函数re.escape
。但是我找不到一个好的解决方案。如果我的猜测是对的,那么此时所有的答案都是错误的,因为如果我们输入a=“\u0026”
,那么a
现在是“&”,一个正常的转义,不需要转换。可能是
def deescape(escaped):
return str(json.loads("{\"s\":\"" + escaped + "\"}"))[7 : -2]
deescape("\\u0026") # return '&'
# Python 2
def deescape(escaped)
return escaped.decode('string_escape')
# Python 3
def deescape(escaped)
return escaped.encode().decode('unicode_escape')
myStr.replace("\\u0026","&")