Преобразуйте октеты UTF-8 в unicode кодовые точки

Ctrl+L удаляет текущую выбранную строку. Это экономит время (если используется ответственно, конечно!!!)

9
задан Poorna 8 December 2009 в 04:59
поделиться

4 ответа

Python 3.x:

В Python 3.x, str - это класс для текста Unicode, а байтов для содержания октетов .

Если под «октетами» вы действительно имеете в виду строки в форме '0xc5' (а не '\ xc5'), вы можете преобразовать их в байты следующим образом:

>>> bytes(int(x,0) for x in ['0xc5', '0x81'])
b'\xc5\x81'

Затем вы можете преобразовать в str (например: Unicode) с помощью конструктора str ...

>>> str(b'\xc5\x81', 'utf-8')
'Ł'

... или путем вызова .decode ('utf-8') на bytes объект:

>>> b'\xc5\x81'.decode('utf-8')
'Ł'
>>> hex(ord('Ł'))
'0x141'

Pre-3.x:

До 3.x тип str был байтовым массивом, а unicode был для текста Unicode.

Опять же, если под «октетами» вы действительно имеете в виду строки в форме '0xc5' (а не '\ xc5'), вы можете преобразовать их следующим образом:

>>> ''.join(chr(int(x,0)) for x in ['0xc5', '0x81'])
'\xc5\x81'

Затем вы можете преобразовать в юникод , используя конструктор ...

>>> unicode('\xc5\x81', 'utf-8')
u'\u0141'

... или вызвав .decode ('utf-8') на str :

>>> '\xc5\x81'.decode('utf-8')
u'\u0141'
14
ответ дан 4 December 2019 в 08:52
поделиться

В прекрасном 3.x, где все str - это Unicode, а байты - это то, что раньше было str :

>>> s = str(bytes([0xc5, 0x81]), 'utf-8')
>>> s
'Ł'
>>> ord(s)
321
>>> hex(ord(s))
'0x141'

Это то, о чем вы просили.

6
ответ дан 4 December 2019 в 08:52
поделиться
l = ['0xc5','0x81']
s = ''.join([chr(int(c, 16)) for c in l]).decode('utf8')
s
>>> u'\u0141'
3
ответ дан 4 December 2019 в 08:52
поделиться
>>> "".join((chr(int(x,16)) for x in ['0xc5','0x81'])).decode("utf8")
u'\u0141'
1
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: