Как декодировать строку Unicode, начинающуюся с "% u" (символ процента + u) в Python 3 - PullRequest
0 голосов
/ 28 апреля 2020

Я получаю некоторый HTML код, подобный следующему:

<new>8003,%u767E%u5723%u5E97,113734,%u4E50%u4E8B%u542E%u6307%u7EA2%u70E7%u8089%u5473,6924743915824,%u7F50,104g,3,21.57,-2.16,0,%u4E50%u4E8B,1</new>

Я знаю, что могу найти и заменить все "% u" на "/ u" в Notepad ++, а затем вставить его в * Консоль 1006 * для правильного отображения китайских иероглифов. Но как я могу сделать это автоматически в Python?

1 Ответ

1 голос
/ 28 апреля 2020

Предполагая, что ваша входная строка содержит закодированные в процентах символы, мы можем найти и декодировать их с помощью замены регулярного выражения и функции обратного вызова.

Кодировка Percent-u представляет кодовую точку Unicode в виде четырех шестнадцатеричного числа цифры: %u767E767E ⇒ код 30334 ⇒ 百.

import re

def hex_to_char(hex_str):
    """ converts a single hex-encoded character 'FFFF' into the corresponding real character """
    return chr(int(hex_str, 16))

s = "<new>8003,%u767E%u5723%u5E97,113734,%u4E50%u4E8B%u542E%u6307%u7EA2%u70E7%u8089%u5473,6924743915824,%u7F50,104g,3,21.57,-2.16,0,%u4E50%u4E8B,1</new>"

percent_u = re.compile(r"%u([0-9a-fA-F]{4})")

decoded = percent_u.sub(lambda m: hex_to_char(m.group(1)), s)

print(decoded)

который печатает

<new>8003,百圣店,113734,乐事吮指红烧肉味,6924743915824,罐,104g,3,21.57,-2.16,0,乐事,1</new>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...