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.