#python #python-3.x
Вопрос:
есть такие символы, ''
которые не видны, поэтому я не могу скопировать и вставить их. Я хочу преобразовать любой символ в его кодовую точку, например 'u200D'
другим примером является: 'abc' => 'u0061u0062u0063'
Комментарии:
1.
'abc'
и'u0061u0062u0063'
являются двумя разными строковыми литералами, представляющими одну и ту же строку. Преобразование не требуется выполнять.2. «преобразовать любой символ в его юникод» не имеет смысла — это не то, что означает «Юникод».
3.Какое это имеет отношение к вставке копий? Обратите внимание, что его
''
можно скопировать/вставить; он соответствует кодовой точке Юникода 8204 или u200c.
Ответ №1:
Позвольте мне перефразировать ваш вопрос. Заголовок преобразования строки в ее кодовую точку на python явно не дошел до всех, в основном, я думаю, потому что мы не можем себе представить, для чего он вам нужен.
То, что вам нужно, — это строка, содержащая представление экранирования в Юникоде.
Вы можете сделать это таким образом:
print(''.join("\u{:04x}".format(b) for b in b'abc'))
u0061u0062u0063
Если вы отобразите это напечатанное значение в виде строкового литерала, вы увидите удвоенные обратные косые черты, потому что обратные косые черты должны быть экранированы в строке Python. Так что это будет выглядеть так:
'\u0061\u0062\u0063'
Причина этого в том, что если вы просто поместите неэкранированные обратные косые черты в свой строковый литерал, как это:
a = "u0061u0062u0063"
когда вы отобразите a
приглашение, вы получите:
>>> a
'abc'
Комментарии:
1. Это работает с байтами, а не с символами юникода. Просто потому
abc
, что в обоих случаях есть одинаковые кодовые точки, это не делает это эквивалентным.
Ответ №2:
'u0061u0062u0063'.encode('utf-8')
будет кодировать текст в Юникод.
Редактировать:
Поскольку python автоматически преобразует строку в Юникод, вы не можете видеть значение, но вы можете создать функцию, которая сгенерирует его.
def get_string_unicode(string_to_convert):
res = ''
for letter in string_to_convert:
res = '\u' (hex(ord(letter))[2:]).zfill(4)
return res
Результат:
>>> get_string_unicode('abc')
'\u0061\u0062\u0063'
Комментарии:
1. Спасибо! это сработало!!! для некоторых других персонажей, таких как смайлики, мы должны использовать название \U000, поэтому я использовал
res = res ('\u' hex(ord(letter))[2:]).zfill(4) if len((hex(ord(letter))[2:]))<5 else res '\U000' (hex(ord(letter))[2:]).zfill(4)