2013-04-10 214 views
16

我有大約1000個文件名,由os.listdir() 讀取,其中一些編碼爲'utf-8',一部分爲'cp1252'。Python檢測字符串字節編碼

我想將它們全部解碼爲unicode,以便在腳本中進一步處理。有沒有辦法讓源編碼正確解碼成unicode?

例子:

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 

回答

22

如果你的文件不管是在cp1252utf-8,然後有一個簡單的方法。

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 

否則,有一個字符集檢測庫。

Python - detect charset and convert to utf-8

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

+13

避免使用空白'except:'。它抓住了一切,甚至是基於系統的異常。在這種情況下'除了Exception:'或',UnicodeError:'可能是最有意義的。 – twasbrillig 2015-02-11 21:57:28

+3

除了空白處的好處,但我相信正確的異常是'UnicodeDecodeError' – guival 2016-06-07 11:34:24

5

使用的chardet庫。這是超級容易

import chardet 

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

就是這樣!