Как декодировать UTF-16 с% в качестве строки разделителя в исходную форму в Python3? - PullRequest
0 голосов
/ 06 июля 2018

Я работаю с оператором мобильной связи, который уведомляет меня с каким-то utf-16 кодированным строкой . Например, '%u062a%u0633%u062a' является эквивалентом 'تست' на персидском языке. Я не уверен точно, какова кодировка этих строк. Как я могу преобразовать их в их реальную форму, как 'تست'?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Вы можете разделить шестнадцатеричные значения символов на % u , а затем найти символ Юникода, используя встроенную функцию chr.

def convert_to_unicode(text):
    return_str = ''
    for character in text.split('%u'):
        if character:
            chr_code = int(character, 16)
            return_str += chr(chr_code)
    return return_str


text = '%u062a%u0633%u062a'
print(convert_to_unicode(text))

Выход:

تست

Или вы можете использовать escape-кодировку Unicode, как в другой ответ по blhsing.

def convert_to_unicode(text: str):
    # Replace %.
    text = text.replace('%', '\\')
    # Escape unicode into character.
    text = text.encode().decode('unicode-escape')
    return text
0 голосов
/ 06 июля 2018

Простой способ сделать это - заменить % на \, чтобы сделать его литералом python с экранированными символами Юникода, а затем декодировать его с помощью unicode-escape.

s = b'%u062a%u0633%u062a'
print(s.replace(b'%', b'\\').decode('unicode-escape'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...