VasCraft
Май 10, 2011 13:41:49
Доброго времени суток. Тут возникла проблема, выбивающая из колеи напрочь. Суть проблемы в том, что имеется файл с КИРИЛЛИЧЕСКИМИ символами в кодировке Ansi, чтение которого осуществляется без проблем в принципе. Проблема состоит в записи файла! Файл либо не записывается, либо записывается, но при дальнейшем чтении читаемое предствляет безсмысленный набор закодированных символов.
Данная проблема мне весь мозг выела, поэтому ничего не понимаю. Если возможно, предложите выход из данной ситуации.
P.S. Суть да дело, насколько я понимаю, файл сохранятся в кодировке utf8, можете ли предложить либо корректный способ его сохранения в других кодировках(ANSI), либо сразу же перед записью кодировать записываемые строки в ‘нормальный вид’ для последующего нормального чтения. Или же лучше не менять кодировку файла, а просто записывать в него киррилические символы? Последнее мне наиболее предпочтительно.
Помогите, пожалуйста, реально это проблема сейчас для меня!
truporez
Май 10, 2011 14:03:42
Было-бы неплохо увидеть как Вы открываете файл. Возможно для работы подойдёт функция open из модуля codecs.
VasCraft
Май 10, 2011 14:16:42
truporez
Было-бы неплохо увидеть как Вы открываете файл. Возможно для работы подойдёт функция open из модуля codecs.
Хорошо, покажу код:
def OnSave(self,e):
dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", wx.SAVE | wx.OVERWRITE_PROMPT)
if dlg.ShowModal() == wx.ID_OK:
itcontains = self.control.GetValue()
self.filename=dlg.GetFilename()
self.dirname=dlg.GetDirectory()
filehandle=open(os.path.join(self.dirname, self.filename),'w')
filehandle.write(itcontains.encode('utf-8'))
filehandle.close()
dlg.Destroy()
Это код - выдержка из редактора текстовых файлов. Собственно в нем и весь сыр-бор.
P.S. ВНЕЗАПНО пришла идея заменить в строчку
filehandle.write(itcontains.encode('utf-8'))
на
filehandle.write(itcontains.encode('cp1251'))
Протестирую - отпишусь. Если есть мысли - высказывайте
VasCraft
Май 10, 2011 14:56:03
Предложенный мной метод помог решить данную проблему. Теперь при открытии любого из файлов их содержимое отображается вполне корректными кириллическими символами, так что проблема решена. Спасибо за внимание!
truporez
Май 10, 2011 18:34:30
Чем хорош codecs.open так это тем, что вы задали раз кодировку при открытии и далее используете просто read/write без трюков с encode. Но он годиться только если кодировка файла изначально известна.