Мне интересно, как я могу преобразовать символы ISO-8859-2 (latin-2) (я имею в виду целые или шестнадцатеричные значения, представляющие кодированные символы ISO-8859-2) в символы UTF-8.
Что мне нужно сделать с моим проектом на питоне:
- Получите шестнадцатеричные значения из последовательного порта, которые представляют собой символы, закодированные в ISO-8859-2.
- Расшифруйте их, это - получите от них "стандартные" строки юникода python.
- Подготовьте и напишите xml файл.
Использование Python 3.4.3
txt_str = "ąęłóźć"
txt_str.decode('ISO-8859-2')
Traceback (most recent call last): File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'decode'
Основная проблема по-прежнему заключается в подготовке допустимых входных данных для метода «декодирования» (он работает в python 2.7.10, и именно его я использую в этом проекте). Как подготовить допустимую строку из десятичного значения, которое является кодовым номером Latin-2?
Обратите внимание, что было бы очень сложно получать символы utf-8 из последовательного порта из-за устройств, которые я использую, и ограничений протокола связи.
Пример данных по запросу:
68632057
62206A75
7A647261
B364206F
20616775
777A616E
616A2061
6A65696B
617A20B6
697A7970
6A65B361
70697020
77F36469
62202C79
6E647572
75206A65
7963696C
72656D75
6A616E20
73726F67
206A657A
65647572
77207972
73772065
00000069
Это примерные данные. ISO-8859-2 вставлен в uint32, 4 символа на целое число.
кусок кода, который управляет распаковкой:
l = l[7:].replace(",", "").replace(".", "").replace("\n","").replace("\r","") # crop string from uart, only data left
vl = [l[0:2], l[2:4], l[4:6], l[6:8]] # list of bytes
vl = vl[::-1] # reverse them - now in actual order
Чтобы получить целочисленное значение из шестнадцатеричной строки, я могу просто использовать:
int_vals = [int(hs, 16) for hs in vl]
b'\xb1\xea\xb3\xf3\xbc\xe6'
(и, возможно, информацию о том, что это представление строки"ąęłóźć"
в ISO-8859-2); но тогда это уже ответ на ваш вопрос, я думаю. - person tripleee   schedule 02.02.2016read()
, которая поддерживает методdecode()
. Я думаю, что ваш тестовый код не соответствует тому, что вы на самом деле хотите сделать. - person Alastair McCormack   schedule 02.02.2016