Python для записи в файл с кодировкой 'latin-1'

Я знаю, что уже есть много вопросов, касающихся кодирования / декодирования. Но это сводит меня с ума, и мне отчаянно нужна помощь.

Я прочитал в файле, преобразовывая строки в unicode

line = unicode(line,'latin-1')

Затем я делаю некоторые мутации и пытаюсь записать содержимое обратно в файл, кодируя строку следующим образом

o_str = '%s,%s' % (new_sname, loc )
w_out.write(o_str.encode('latin-1'))

Файл содержит, например, название города "Женева", которое u'Gen\xc3\xa8ve' как юникод. Кодировать его как "Latin-1"

gue = gu.encode('iso-8859-1')

дает мне на консоли

>>> print gue
Genève

Но в файле мой файл это все еще "Genève". Может кто-нибудь указать мне на то, что мне не хватает?

1 ответ

Решение

Вы декодируете данные UTF-8 как Latin 1, вместо этого используйте правильный кодек:

>>> 'Gen\xc3\xa8ve'.decode('latin1')
u'Gen\xc3\xa8ve'
>>> print 'Gen\xc3\xa8ve'.decode('latin1')
Genève
>>> 'Gen\xc3\xa8ve'.decode('utf8')
u'Gen\xe8ve'
>>> print 'Gen\xc3\xa8ve'.decode('utf8')
Genève

Правильный код Unicode для è письмо U+00E8, представлена \u00e8 или же \xe8 в литерале Python Unicode и шестнадцатеричных байтах C3A8 в UTF-8. Неправильная интерпретация C3 A8 приводит к двум символам Юникода Ã а также ¨, который вы затем снова записываете в свой файл как C3 и A8, потому что Latin1 отображает один на один с Unicode.

Другие вопросы по тегам