преобразуйте строку в ее кодовую точку на языке python

#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)