Bonjour
Pour bien comprendre l'encoding, il faut connaitre la base. Et la base, pour Python3, c'est l'unicode. Toute chaine écrite en Python est écrite en unicode.
Il convient donc, quand tu lis une data externe, de connaitre son encoding (ce qui rejoint ici la remarque de N_BaH sur le fait que cette info devrait être dispo quelque part) afin de pouvoir la convertir en unicode à l'entrée. Et il faut faire cette opération le plus tôt possible.
Ensuite, dans ton code, t'es tranquille. Tu peux manipuler la data en interne, tout sera bien géré question encoding.
Ensuite, à la sortie, il te faut convertir la data dans l'encoding cette fois de ton choix. Je vois que tu utilises utf-16 mais généralement le plus universel est l'utf-8 (ou alors tu veux réécrire le fichier dans son encoding originel).
Après si par malchance tu ne connais pas l'encoding de tes datas input, il existe la librairie "chardet" qui peut le sniffer (il faut alors lire la data sous sa forme binaire) et te donner un résultat sous forme probabiliste
1 2 3 4 5 6
| >>> import chardet
>>> with open("/etc/passwd", "rb") as fp:
... chardet.detect(fp.read())
...
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
>>> |
La probabilité est donnée dans le champ "confidence".
Partager