带有十六进制字符串的python将\ u0026更改为&

时间:2018-12-28 15:44:40

标签: python hex

我有一个像这样的字符串:

downloadFile":"/myportal/ABC/35/audio/182/audio?Id=996\u0026stepNo=0\u0026resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav

我需要将\ u0026(十六进制)更改为& 我什至尝试过->

.replace("\u0026","&")  

它没用

5 个答案:

答案 0 :(得分:0)

在谈到URL时,请帮一个忙,并使用urllib,在这里您需要urllib.parse.unquote

import urllib.parse

url = "/myportal/ABC/35/audio/182/audio?Id=996\u0026stepNo=0\u0026resource=996-0-dde82d48-3097-4835-a1e4-30602c460fd7-1.wav"
print(urllib.parse.unquote(url))

如果是Python2.x,请使用import urlliburllib.unquote()

答案 1 :(得分:0)

尝试此代码!

工作正常。

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

答案 2 :(得分:0)

也许您可以提供抛出的错误,但是从我看到的情况来看,downloadFile之后的::冒号上似乎有引号,这可能会导致错误,现在您可以使用反斜杠()进行转义像这样:

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","&")

这应该工作正常。 For reference I have added what I ran in my console since the code worked fine for me

如果问题仍然存在,请发布您所运行的内容以及收到的错误,我一定会进一步调查

有一个好:)

答案 3 :(得分:0)

正如我的评论所说,我猜“ \ 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 '&'

更新:如果escaped包含“:”,则此解决方案不适用。真正的解决方案should be

# Python 2
def deescape(escaped)
    return escaped.decode('string_escape')

# Python 3
def deescape(escaped)
    return escaped.encode().decode('unicode_escape')

答案 4 :(得分:0)

没有一个对我有用的唯一方法是使用-> \ u0026 note double \

myStr.replace("\\u0026","&")