Создание необработанного символа Юникода из представления шестнадцатеричной строки / ввод одиночной обратной косой черты - PullRequest
2 голосов
/ 21 мая 2019

Я хочу создать необработанный символ Юникода из шестнадцатеричного представления строки. То есть у меня есть строка s = '\ u0222', которая будет символом 'Ȣ'.

Теперь, это работает, если я делаю

>>> s = '\u0222'
>>> print(s)
'Ȣ'

но, если я попытаюсь сделать конкатенацию, она будет выглядеть как

>>> h = '0222'
>>> s = r'\u' + '0222'
>>> print(s)
\u0222
>>> s
'\\u0222'

потому что, как видно, на самом деле в строке находится '\\ u', а не '\ u'. Как я могу создать символ Unicode из шестнадцатеричных строк или, как я могу ввести настоящую одиночную обратную косую черту?

Ответы [ 2 ]

3 голосов
/ 21 мая 2019

Это было гораздо труднее решить, чем я ожидал:

code = '0222'
uni_code = r'\u' + code
s = uni_code.encode().decode('unicode_escape')
print(s)

Или

code = b'0222'
uni_code = b'\u' + code
s = uni_code.decode('unicode_escape')
print(s)
2 голосов
/ 21 мая 2019

Ввод \u0222 предназначен только для строковых констант, и интерпретатор Python генерирует одну кодовую точку Unicode для этого синтаксиса.Это не предназначено, чтобы быть построенным вручную.Функция chr() используется для генерации кодовых точек Unicode.Следующие работы для строк или целых чисел:

>>> chr(int('0222',16)) # convert string to int base 16
'Ȣ'
>>> chr(0x222)          # or just pass an integer.
'Ȣ'

И FYI ord() является дополнительной функцией:

>>> hex(ord('Ȣ'))
'0x222'
...