[python] ConfigParser 编码问题和示例
来源:互联网 发布:富兰克林罗斯福知乎 编辑:程序博客网 时间:2024/06/01 10:48
最近用ConfigParser的时候出现了编码问题……原因是别人给我的一个配置文件(姑且叫config.ini)的编码是utf-8的,如果用ConfigParser的默认接口read,传入文件名去读,读取会失败,然后看来了下ConfigParser的源码,有些小收获,先看read接口的源码:
这个接口的参数就一个filenames,里面直接使用的open来打开文件,看来是解决不了编码问题了,不过在里面发现了新玩意,居然是支持传一个文件名的list进来的,哈哈,牛皮。再跟到_read(self, fp, fpname)里面去……这个里面是用的一个map存储的这些key-value对,如果你有几个配置文件,里面的section相同,key也相同,是否被覆盖的,具体可以跟一下源代码。不过他这个地方设计为传入list是为了支持同一个配置文件可能放在几个不同的地方的问题,具体可以看看上面read的说明。
既然read接口不行,再看看其他的接口,还好,还有个readfp接口,从字面意思应该是接受一个“文件句柄”,汗,居然用了句柄,应该是python文件的对象,先看看源代码吧。
很好很强大,接口简单,实现也简单,大概就是你外面open一个文件对象之后,传入就可以了,应该可以解决文件编码的问题,因为_read里面直接调用了这个文件对象的readline方法(read接口之所以编码出现问题,基本都是出在readline的时候,而内置的open方法是按照ansii来解码,当然出问题),然后对获取的字符串行直接进行正则匹配,呃,python就是这么简洁,赞!
所以这个地方可以调用codecs的open方法来指定文件的编码,然后传入打开的文件对象。
具体对于utf8文件有个要注意的地方,看它是否带有efbbbf头,也就是BOM,如果有的话,传入的时候使用"utf-8-sig"来指明编码,如果没有这个BOM,传入的时候使用"utf-8",windows下面的记事本程序,如果你选择另存为,选中编码utf-8的话,存储出来是带有BOM的。自己看着办。
写了一个简单的类如下:
调用:
[end]
- [python] ConfigParser 编码问题和示例
- 记录python ConfigParser 处理编码问题
- Python-ConfigParser常用操作示例
- python configparser 中文支持问题
- 解决python ConfigParser文件编码问题(按指定格式存储文件(txt))
- 解决python ConfigParser文件编码问题(按指定格式存储文件(txt))
- 修改Python ConfigParser option 大小写的问题
- Python ConfigParser
- python ConfigParser
- python -- ConfigParser
- python-ConfigParser
- Python ConfigParser
- python ConfigParser
- python configparser
- Python--ConfigParser
- Python ConfigParser
- python configparser
- Python的ConfigParser和Log操作
- 正反说QT
- Spring 调度任务
- 使用内存映射比较两个wave文件的异同
- xv6内存布局详解
- 把它发给你最爱的人吧!真的很好啊.
- [python] ConfigParser 编码问题和示例
- Windows Server 2008: Install Windows PowerShell
- C# catch 块中可以俘获 SQL Server 抛出的自定义异常(RAISERROR)(轉)
- PowerBuilder创建动态数据窗口综述
- 人民日报1998年中文标注语料库及读取代码
- Oracle 行列转换 总结
- 自解压文件实现
- Oracle TableSpace名修改
- SOAP学习