Преобразуйте bytearray, содержащий данные Unicode, в str - PullRequest
0 голосов
/ 20 июня 2020

Мне нужно преобразовать массив байтов, который содержит некодированные исходные данные Unicode, в строку Unicode, например, unicode \ u2167 представляет римское число 8:

print(u'\u2167')
Ⅷ

с сохранением этой информации в массиве байтов I нужно найти способ преобразовать его обратно в Unicode. Декодирование, например, 'utf8', очевидно, не работает:

b = bytearray([0x21,0x67])
print(b.decode('utf8'))
!g

Есть идеи?

РЕДАКТИРОВАТЬ

Комментарий @ Luke получил меня справа трек. По-видимому, исходные данные (не упрощенные, которые я показываю здесь) закодированы как UTF-16le. Данные получены из объекта wx python TextDataObject. wx python для внутреннего использования обычно использует юникод. Это заставило меня подумать, что я имею дело с данными Unicode.

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

... байтовый массив, который содержит некодированные необработанные данные Unicode

Если он находится в байтовом массиве, он по определению закодирован. Типы Python bytes или bytearray могут содержать данные в кодировке Unicode. Тип str содержит кодовые точки Unicode. Вы .decode строка байтов в строку Unicode и .encode строку Unicode в строки байтов. Кодировка, используемая для вашего примера, - UTF-16BE:

>>> b = bytearray([0x21,0x67])
>>> b.decode('utf-16be')
'Ⅷ'
0 голосов
/ 20 июня 2020

Строка print(b.decode('utf8')) неверна, правильное использование:

print(b.decode("utf-8"))
...