Содержимое ini
quest = text1
answer = text2
config = ConfigParserFix.ConfigParser() text = config.readfp(codecs.open("dialog.ini", "w", "utf-8-sig"))
При записи в файл, меняется его кодировка. Как оставить Utf-8?
text.write(text)
config = ConfigParserFix.ConfigParser() text = config.readfp(codecs.open("dialog.ini", "w", "utf-8-sig"))
text.write(text)
import ConfigParser import codecs config = ConfigParser.ConfigParser() with codecs.open('dialog.ini', encoding='utf-8-sig') as f: config.readfp(f) config.set('test', 'quest2', 'asdf') with codecs.open('dialog.ini', 'w', encoding='utf-8-sig') as f: config.write(f)
char_config = ConfigParserFix.ConfigParser() # Открываю файл для записи text = codecs.open(r"ini/dialog.ini", "w", encoding='utf-8-sig') for theme in dialog: quest = self.quest.text() quest = unicode(quest) answer = self.answer.text() answer = unicode(answer) dialog[theme].answer.append(answer) dialog[theme].quest.append(quest) for theme in dialog: fix = '[' + theme + ']' # Добовляю в список строку text.write(fix+'\n') fix = 'quest =' for qt in xrange(0,len(dialog[theme].quest)): fix += dialog[theme].quest[qt] + ' ' text.write(fix+'\n') fix = 'answer =' for qt in xrange(0,len(dialog[theme].answer)): fix += dialog[theme].answer[qt] + ' ' text.write(fix+'\n')
Note Files are always opened in binary mode, even if no binary mode was specified. This is done to avoid data loss due to encodings using 8-bit values. This means that no automatic conversion of ‘\n’ is done on reading and writing.Решение с меньшим переписыванием логики сохранения:
import ConfigParser import codecs import StringIO config = ConfigParser.ConfigParser() ... buf = StringIO.StringIO() config.write(buf) with codecs.open('dialog.ini', 'w', encoding='utf-8-sig') as f: f.write(buf.getvalue().replace('\n', '\r\n'))