ConfigParser中的编码(Python)

时间:2017-09-25 13:49:05

标签: python dictionary encoding utf-8 configparser

Python 3.1.3 我需要的是使用ConfigParser从cp1251文件中读取字典。 我的例子:

$s = "3.00";
$n = +$s;
var_dump( $n ); // float(3)
var_dump( is_float($n) ); // true


$s = "3";
$n = +$s;
var_dump( $n ); // int(3)
var_dump( is_float($n) ); // false

之后,我试图根据字典替换某些UTF-8文件中的某些单词。但有时它不起作用(例如,带有“新行回车”的符号)。 我的文件是UTF-8和CP1251中的配置文件(字典)。好像很麻烦,我必须将配置解码为UTF-8。 我试过这个:

config = configparser.ConfigParser()
config.optionxform = str
config.read("file.cfg")
DataStrings = config.items("DATA")
DataBase = dict()
for Dstr in DataStrings:
    str1 = Dstr[0]
    str2 = Dstr[1]
DataBase[str1] = str2

但是出现了错误str1 = Dstr[0].encode('cp1251').decode('utf-8-sig') 。 如果我使用"'utf8' codec can't decode byte 0xcf in position 0" - 我几乎失去了所有配置文件。 我该怎么办?

1 个答案:

答案 0 :(得分:2)

Python 3.1是Python版本的无人区。理想情况下,您将升级到Python 3.5,这将允许您执行config.read("file.cfg", encoding="cp1251")

如果您必须保持3.1x,则可以使用ConfigParser.readfp()方法使用正确的编码从以前打开的文件中读取:

import configparser

config = configparser.ConfigParser()
config.optionxform = str
config_file = open("file.cfg", encoding="cp1251")
config.readfp(config_file)