2015-08-25 4 views
2

Я wonna читать/писать русский текст, например:ошибка кодека Ascii при написании ConfigObj

from configobj import ConfigObj 
obj = ConfigObj('config.ini') 
mydata = ['вася', 'петя'] 
obj['users'] = mydata 
obj.write() 

И я получаю ошибку:

obj.write() 
File "/usr/lib/python3.4/site-packages/configobj-5.0.6-py3.4.egg/configobj.py", line 2119, in write 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-13: ordinal not in range(128) 

На питона 2.7 все работает отлично, но 3.4 .. . Помоги мне, пожалуйста. Что я делаю не так?

ответ

0

Перед записью конфигурации выход кодируется, если он уже не является двоичным. Вот почему он работает на Python 2.

Чтобы правильно обрабатывать encoding, вам необходимо установить его соответствующим образом:

obj = ConfigObj('config.ini', encoding='utf8') 
0

Почти. Поскольку вы устанавливаете ключ с использованием строки UTF-8, ваша структура данных ConfigObj теперь имеет комбинацию Unicode и UTF-8.

Опция default_encoding управляет преобразованием из UTF-8 в Unicode. Затем параметр encoding управляет преобразованием из Юникода в UTF-8, что и есть, если, наконец, записать в файл.

Итак, вы хотите:

from configobj import ConfigObj 
obj = ConfigObj('config.ini', default_encoding='utf8') 
mydata = ['вася', 'петя'] 
obj['users'] = mydata 
obj.write()