我使用配置文件“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”编码,或者可以为此文件设置永久编码,为其添加一些脚本?
答案 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'