Создайте необработанный символ Юникода из представления шестнадцатеричной строки/введите одну обратную косую черту

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

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

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

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

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
185
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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)

Согласитесь, намного сложнее, чем казалось. Ты опередил меня, пока я тестировал! Для OP более подробную информацию и примеры можно найти в этот ответ.

G. Anderson 21.05.2019 20:25

Это сложнее, потому что создание escape-констант Unicode — не самый прямой путь. См. функцию chr().

Mark Tolonen 21.05.2019 22:47
Ответ принят как подходящий

Ввод \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'

Гораздо лучший ответ. Я полагал, что это было что-то, но я не знал, что это было.

Error - Syntactical Remorse 21.05.2019 22:48

Другие вопросы по теме