38 votes

Détecter charset et convertir en utf-8 en Python ?

Existe-t-il une méthode universelle pour détecter les jeux de caractères ? J'utilise des balises IPTC et n'ai pas d'encodage connu. Je dois le détecter et ensuite les changer à utf-8.

Tout le monde peut aider ?

39voto

Ignacio Vazquez-Abrams Points 312628

Vous voulez utiliser chardet, un détecteur d'encodage

18voto

parcouss Points 126

C'est un peu tard, mais il y a aussi une autre solution : essayer d'utiliser pyicu.

Un exemple :

import icu
def convert_encoding(data, new_coding='UTF-8'):
    coding = icu.CharsetDetector(data).detect().getName()
    if new_coding.upper() != coding.upper():
        data = unicode(data, coding).encode(new_coding)
    return data

17voto

teawithfruit Points 717

Si vous voulez le faire avec cchardet, vous pouvez utiliser cette fonction.

import cchardet
def convert_encoding(data, new_coding = 'UTF-8'):
  encoding = cchardet.detect(data)['encoding']

  if new_coding.upper() != encoding.upper():
    data = data.decode(encoding, data).encode(new_coding)

  return data

5voto

laike9m Points 1215

Il existe un autre module appelé cchardet

On dit qu'il est plus rapide que le cardet.

Notez qu'il nécessite Cython

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