web-dev-qa-db-fra.com

Comment détecter l'encodage des octets de chaîne?

J'ai environ 1000 noms de fichiers lus par os.listdir(), certains d'entre eux sont encodés en UTF8 et certains sont CP1252.

Je veux tous les décoder en Unicode pour un traitement ultérieur dans mon script. Existe-t-il un moyen d'obtenir le codage source pour décoder correctement en Unicode?

Exemple:

for item in os.listdir(rootPath):

    #Convert to Unicode
    if isinstance(item, str):
        item = item.decode('cp1252')  # or item = item.decode('utf-8')
    print item
30
Phil

si vos fichiers dans cp1252 et utf-8, alors il existe un moyen simple.

import logging
def force_decode(string, codecs=['utf8', 'cp1252']):
    for i in codecs:
        try:
            return string.decode(i)
        except UnicodeDecodeError:
            pass

    logging.warn("cannot decode url %s" % ([string]))

for item in os.listdir(rootPath):
    #Convert to Unicode
    if isinstance(item, str):
        item = force_decode(item)
    print item

sinon, il y a un lib charset detect.

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

https://pypi.python.org/pypi/chardet

30
lucemia

Utilisez la bibliothèque chardet. C'est super facile

import chardet

the_encoding = chardet.detect('your string')['encoding']

et c'est tout!

22
george