Je me demande comment puis-je convertir des caractères ISO-8859-2 (latin-2) (je veux dire des valeurs entières ou hexadécimales qui représentent l'encodage ISO-8859-2 caractères) en caractères UTF-8.Conversion entre ISO-8859-2 et UTF-8 en Python
Ce que je dois faire avec mon projet en python:
- Recevoir les valeurs hexagonales du port série, qui sont caractères de l'ISO-8859-2.
- Décodez-les, c'est - obtenez des chaînes "standard" python unicode.
- Préparez et écrivez le fichier xml.
En utilisant 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'
Le principal problème est toujours de préparer l'entrée valable pour la méthode « decode » (cela fonctionne en python 2.7.10, et thats celui que je suis en utilisant Dans ce projet). Comment préparer une chaîne valide à partir de la valeur décimale, qui sont des numéros de code Latin-2? Notez qu'il serait plus compliqué de recevoir des caractères utf-8 à partir du port série, grâce aux périphériques que j'utilise et aux limitations du protocole de communication.
Données d'échantillons, sur demande:
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
Il s'agit quelques exemples de données. ISO-8859-2 poussé dans uint32, 4 caractères par int.
bits de code qui gère unboxing:
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
Pour obtenir la valeur entière de la chaîne hexagonale je peux simplement utiliser:
int_vals = [int(hs, 16) for hs in vl]
Il devrait être aussi simple comme: this_is_the_text_string.decode ('ISO-8859-2'), qui vous donne la chaîne unicode (au moins dans Python 3). – elzell
Facile. Convertir de [hex en octets] (https://docs.python.org/2/library/binascii.html#binascii.a2b_hex), [décoder en latin-2] (https://docs.python.org/2 /library/stdtypes.html#str.decode), [encoder comme UTF-8] (https://docs.python.org/2/library/stdtypes.html#str.encode). Avez-vous des exemples de données? –
Cependant, si vous voulez écrire du XML, pourquoi ne pas garder la valeur comme Unicode (donc décodée de ISO-8859-2), et la laisser à la bibliothèque XML pour encoder en UTF-8? –