ISO-8859-2 (latin-2) 文字 (ISO-8859-2 でエンコードされた文字を表す整数または 16 進数値を意味します) を UTF-8 文字に変換するにはどうすればよいでしょうか。
私のプロジェクトでPythonで行う必要があること:
- ISO-8859-2 でエンコードされた文字であるシリアル ポートから 16 進値を受け取ります。
- それらをデコードします。これは、「標準の」Python Unicode 文字列を取得することです。
- 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 コード番号である 10 進数値から有効な文字列を準備するにはどうすればよいですか?
私が使用しているデバイスと通信プロトコルの制限のおかげで、シリアルポートから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 にプッシュされ、int あたり 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
16進文字列から整数値を取得するには、次のように簡単に使用できます。
int_vals = [int(hs, 16) for hs in vl]