Python: конвертировать строку из UTF-8 в Latin-1

Я чувствую себя сложным, пытаясь изменить кодировки с помощью Python 2.5

У меня есть ответ XML, который я кодирую в UTF-8: response.encode('utf-8'). Это хорошо, но программа, которая использует эту информацию, не любит эту кодировку, и мне нужно ее преобразовать на другую кодовую страницу. Реальный пример заключается в том, что я использую модуль python ghostscript для вставки данных pdfmark в файл PDF. Конечный результат с неправильными символами в Acrobat.

Я делал многочисленные комбинации с .encode() и .decode() между 'utf-8' и 'latin-1', и это сводит меня с ума, поскольку я не могу вывести правильный результат.

Если я вывешу строку в файл с помощью .encode('utf-8'), а затем преобразую этот файл из UTF-8 в CP1252 (aka latin-1) с помощью iconv.exe и вставляем данные, все это хорошо.

В принципе, кто-то может мне помочь преобразовать, т.е. символ á, который UTF-8 закодирован как hex: C3 A1 в латинский-1 как hex: E1?

Заранее спасибо

Ответы

Ответ 1

Вместо .encode('utf-8') используйте .encode('latin-1').

Ответ 2

data="UTF-8 data"
udata=data.decode("utf-8")
data=udata.encode("latin-1","ignore")

Должно это сделать.

Ответ 3

Можете ли вы предоставить более подробную информацию о том, что вы пытаетесь сделать? В общем случае, если у вас есть строка в Юникоде, вы можете использовать кодировку для преобразования ее в строку с соответствующей кодировкой. Например:

>>> a = u"\u00E1"
>>> type(a)
<type 'unicode'>
>>> a.encode('utf-8')
'\xc3\xa1'
>>> a.encode('latin-1')
'\xe1'

Ответ 4

Если предыдущие ответы не решают вашу проблему, проверьте источник данных, которые не будут правильно печатать/конвертировать.

В моем случае я использовал json.load для данных, некорректно прочитанных из файла, не используя encoding="utf-8". Попытка декомпрессии/кодирования результирующей строки на latin-1 просто не помогает...