2 votes

Comment trouver l'encodage d'un objet octets de python3 ?

Je sais que bytes.decode donne une chaîne de caractères et string.encode donne les octets, mais seulement si l'octet correct encoding est utilisé.

Supposons que j'ai un objet octets codé en utilisant gb18030
Si j'essaie de le décoder en utilisant big5 :

>>name = ' damon'
>>b1 = name.encode('gb18030')
>>> b1.decode('big5')
UnicodeDecodeError: 'big5' codec can't decode byte 0xc8 in position 2: illegal multibyte sequence

Existe-t-il un moyen de trouver l'encodage à partir d'un fichier bytes objet ?
Je n'ai pas pu trouver d'api utile à cet égard dans python3 docs.

7voto

kev Points 41855

Vous pouvez utiliser le chardet paquet. Lire este tutoriel.


Si vous utilisez Ubuntu :

sudo apt-get install python3-chardet

Si vous utilisez pip :

pip install chardet2

4voto

gnibbler Points 103484

Comme vous l'avez saisi depuis la console, l'encodage sera le suivant sys.stdin.encoding

>>> name = '深入 damon'
>>> import sys
>>> sys.stdin.encoding
'UTF-8'
>>> b1 = name.decode(sys.stdin.encoding)
>>> b1
u'\u6df1\u5165 damon'
>>> b1.encode(sys.stdin.encoding)
'\xe6\xb7\xb1\xe5\x85\xa5 damon'
>>> print b1.encode(sys.stdin.encoding)
深入 damon

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X