Форум сайта python.su
Доброго времени суток. Тут возникла проблема, выбивающая из колеи напрочь. Суть проблемы в том, что имеется файл с КИРИЛЛИЧЕСКИМИ символами в кодировке Ansi, чтение которого осуществляется без проблем в принципе. Проблема состоит в записи файла! Файл либо не записывается, либо записывается, но при дальнейшем чтении читаемое предствляет безсмысленный набор закодированных символов.
Данная проблема мне весь мозг выела, поэтому ничего не понимаю. Если возможно, предложите выход из данной ситуации.
P.S. Суть да дело, насколько я понимаю, файл сохранятся в кодировке utf8, можете ли предложить либо корректный способ его сохранения в других кодировках(ANSI), либо сразу же перед записью кодировать записываемые строки в ‘нормальный вид’ для последующего нормального чтения. Или же лучше не менять кодировку файла, а просто записывать в него киррилические символы? Последнее мне наиболее предпочтительно.
Помогите, пожалуйста, реально это проблема сейчас для меня!
Отредактировано (Май 10, 2011 13:47:00)
Офлайн
Было-бы неплохо увидеть как Вы открываете файл. Возможно для работы подойдёт функция open из модуля codecs.
Отредактировано (Май 10, 2011 14:04:17)
Офлайн
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()
filehandle.write(itcontains.encode('utf-8'))
filehandle.write(itcontains.encode('cp1251'))
Офлайн
Предложенный мной метод помог решить данную проблему. Теперь при открытии любого из файлов их содержимое отображается вполне корректными кириллическими символами, так что проблема решена. Спасибо за внимание!
Офлайн
Чем хорош codecs.open так это тем, что вы задали раз кодировку при открытии и далее используете просто read/write без трюков с encode. Но он годиться только если кодировка файла изначально известна.
Офлайн