2017-09-25 13 views
0

Python 3.1.3 私が必要とするのは、ConfigParserを使用してcp1251ファイルから辞書を読み取ることです。 私の例:その後ConfigParser(Python)のエンコーディング

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 

は、私は辞書応じて、いくつかのUTF-8のファイルにいくつかの単語を交換しようとしています。しかし、時にはうまくいかない場合もあります(例えば、 "改行の復帰"の記号を使って)。 私のファイルはUTF-8で、構成ファイル(辞書)はCP1251です。私はUTF-8に設定をデコードする必要があります。 私はこれをしようと試みてきました:

str1 = Dstr[0].encode('cp1251').decode('utf-8-sig') 

しかし、エラー"'utf8' codec can't decode byte 0xcf in position 0"が現れました。 .decode('','ignore')を使用している場合 - ほとんどすべての設定ファイルが失われます。 どうすればよいですか?

+1

'config.read(" file.cfg "、encoding =" cp1251 ")' – Goyo

+0

いいですね、うまくいきません。すでに試しました。 Python3.xには "エンコーディング"属性がありません。エンコードは.open()のデフォルト設定から継承されます。 –

+0

属性は何と関係していますか? 'ConfigParser.read'は、少なくとも[python 3.3](https://docs.python.org/3.3/library/configparser.html#configparser.ConfigParser.read)から 'encoding'キーワード引数を持っています。私はあなたが古いバージョンを使用していないことを願っています。 – Goyo

答えて

2

Python 3.1は、Pythonバージョンの無償版です。

import configparser 

config = configparser.ConfigParser() 
config.optionxform = str 
config_file = open("file.cfg", encoding="cp1251") 
config.readfp(config_file) 
:理想的にはあなたが3.1に滞在しなければならない場合、あなたは正しいエンコーディングを使用して、以前に開いたファイルからの読み込みに ConfigParser.readfp()メソッドを使用することができますあなたは config.read("file.cfg", encoding="cp1251")

をやらせるだろうPythonの3.5にアップグレードしたいです

+0

ありがとうございました。本当に –

関連する問題