确定" file.ini#34的编码;

时间:2014-08-22 06:22:19

标签: python encoding

我使用配置文件“myfile.ini”并使用“codecs”模块中的“codecs.open”函数

import codecs
from ConfigParser import SafeConfigParser

f = codecs.open('myfile.ini', mode='r', encoding=???)

事先我不知道“myfile.ini”编码(用户保存文件时可能会更改)

我知道没有正确的方法来确定文件编码并尝试遵循:

arr = ['utf8', 'ascii', ...other_encodings...]
err=0
for enc in arr:
    try:
        conf = SafeConfigParser()
                with codecs.open('myfile.ini', 'r', encoding=enc) as f:
                    conf.readfp(f)

                config = conf.get('a', 'b')
                f.close()
                encoding = enc
     except Exeption as EX:
        err+=1
        continue

print 'file encoding: ', encoding

但遗憾的是,它无法正常运作。

有没有办法确定“myfile.ini”编码,或者可以为此文件设置永久编码,为其添加一些脚本?

1 个答案:

答案 0 :(得分:0)

您可以试用chardet包。

>>> import chardet
>>> chardet.detect(open('/etc/passwd').read())
{'confidence': 1.0, 'encoding': 'ascii'}

另一种选择是使用libmagic(unix file命令的基础)。有一个Python绑定可用python-magic

>>> import magic
>>> m = magic.Magic(mime_encoding=True)
>>> m.from_file('/etc/passwd')
'us-ascii'