web-dev-qa-db-fra.com

Détecter le jeu de caractères et convertir en utf-8 en Python?

Existe-t-il une méthode universelle pour détecter le jeu de caractères de chaîne? J'utilise des balises IPTC et je n'ai aucun codage connu. J'ai besoin de le détecter et de les changer en utf-8.

Quelqu'un peut-il aider?

32
robos85

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

36

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

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
16
parkouss

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
13
teawithfruit

Il existe un autre module appelé cchardet

On dit qu'il est plus rapide que chardet.

Notez qu'il nécessite Cython

3
laike9m