os.listdir,charder返回不能编码字符

时间:2013-11-03 04:41:15

标签: python

这是代码(chardet(https://pypi.python.org/pypi/chardet) - 通用编码检测器)

import chardet

try: 
    for f in os.listdir(path):
        print f, chardet.detect(f)['encoding'], f.decode(chardet.detect(f)['encoding'])
except Exception, e: 
    print str(e)

输出

qiwi2.sql ascii qiwi2.sql
www ascii www
’ҐЄбв®ўл© ¤®Єг¬Ґ­в.txt windows-1252 
'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)

1 个答案:

答案 0 :(得分:1)

问题出在print。它不知道用于控制台输出的编码是什么,因此它假设ASCII,并自动执行encode并失败。如果你自己做encode它应该有用。

print f, chardet.detect(f)['encoding'], f.decode(chardet.detect(f)['encoding']).encode('utf-8')