Я хочу создать необработанный символ Юникода из строкового шестнадцатеричного представления. То есть у меня есть строка s = '\u0222', которая будет символом 'Ȣ'.
Теперь это работает, если я делаю
>>> s = '\u0222'
>>> print(s)
'Ȣ'
но если я попытаюсь выполнить конкатенацию, получится
>>> h = '0222'
>>> s = r'\u' + '0222'
>>> print(s)
\u0222
>>> s
'\\u0222'
потому что, как видно, на самом деле в строке находится '\\u', а не '\u'. Как я могу создать символ Юникода из шестнадцатеричных строк или как ввести настоящую одиночную обратную косую черту?
Это было намного сложнее решить, чем я изначально ожидал:
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)
Это сложнее, потому что создание escape-констант Unicode — не самый прямой путь. См. функцию chr()
.
Ввод \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'
Гораздо лучший ответ. Я полагал, что это было что-то, но я не знал, что это было.
Согласитесь, намного сложнее, чем казалось. Ты опередил меня, пока я тестировал! Для OP более подробную информацию и примеры можно найти в этот ответ.