Python с изменением шестнадцатеричной строки \ u0026 на & - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть такая строка:

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 голосов
/ 28 декабря 2018

Ничего не сработало, единственное, что сработало для меня, это использование -> \ u0026 note double \

myStr.replace("\\u0026","&")
0 голосов
/ 28 декабря 2018

Как сказано в моем комментарии, я думаю, что "\ 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 содержит ":".Реальное решение должно быть :

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

# Python 3
def deescape(escaped)
    return escaped.encode().decode('unicode_escape')
0 голосов
/ 28 декабря 2018

Попробуйте этот код!

Он отлично работает.

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
0 голосов
/ 28 декабря 2018

Возможно, вы могли бы указать, что вы получаете сообщение об ошибке, однако из того, что я вижу, можно увидеть "кавычки на знаке: двоеточие после 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","&")

Это должно работать просто отлично. Для справки я добавил, что я запускал в своей консоли, так как код работал нормально для меня

Если проблема не исчезнет, ​​пожалуйста, опишите, что вы запустили и какую ошибку вы получили, и я будуОбязательно загляните дальше

Хорошего:)

0 голосов
/ 28 декабря 2018

Когда дело доходит до 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 urllib и urllib.unquote().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...