@serhiops
Python/JavaScript/C++

Как декодироавать строку без искажений?

Мне в качестве респонса от сервера прилетает строка такого типа:
b'\\r\\n\\r\\n\\u003cdiv id=\\"iwwait\\" class=\\"hm_overlay\\"\\u003e\\r\\n    \\u003cdiv class=\\"hm_loader\\"\\u003e\\r\\n    \\u003c/div\\u003e\\r\\n\\u003c/div\\u003e\\r\\n\\u003cdiv class=\\"hm_h_020\\"\\u003e\\u003c/div\\u003e\\r\\n\\u003cdiv\\u003e\\r\\n    \\r\\n    \\u003cdiv'

Чтобы распарсить я просто декодирую ее вот так:
html = server_response.decode('unicode_escape', 'ignore')

Оно правильно убирает все юникод символы, но при этом искажает некоторый текст. Например:
Zentrumsnähe -> Zentrumsnähe
При этом я сначала пробывал декдодить его в utf-8 и только потом в unicode_escape. Работает так же само. Как можно декодировать такой тип строк силами Python?
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
server_response = "..."  # https://gist.github.com/serrhiy/56b1f296cb7b4fbf42febaf8c08347a1

def decode_unicode_escapes(string):
    return re.sub(r'\\u([0-9A-Fa-f]{4})', lambda m: chr(int(m.group(1), 16)), string)

unicode_decoded = decode_unicode_escapes(server_response)

try:
    res = unicode_decoded.encode('utf-8').decode('utf-8')
except UnicodeEncodeError as e:
    print(f"Ошибка: {e}.")
    res = unicode_decoded.encode('utf-8', errors='replace').decode('utf-8', errors='replace')

print(res)  # <a href='https://www.immowelt.de/immoweltag/datenschutz' target="_blank" class="hm_link" title="Datenschutzerklärung der AVIV Germany GmbH">
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы