Версия: Python 2.7.3
Другие библиотеки: Python-Requests 1.2.3, jinja2 (2.6)
У меня есть script, который отправляет данные на форум, и проблема в том, что символы не-ascii отображаются как мусор. Например, такое имя, как André Téchiné, выдается как Andrà © Tin chin.
Здесь представлены данные:
1) Данные изначально загружаются из CSV файла с кодировкой UTF-8, например:
entries = []
with codecs.open(filename, 'r', 'utf-8') as f:
for row in unicode_csv_reader(f.readlines()[1:]):
entries.append(dict(zip(csv_header, row)))
unicode_csv_reader находится внизу страницы документации по CSV Python: http://docs.python.org/2/library/csv.html
Когда я ввожу имя записи в интерпретаторе, я вижу это имя как u'Andr\xe9 T\xe9chin\xe9'
.
2) Далее я передаю данные через jinja2:
tpl = tpl_env.get_template(u'forumpost.html')
rendered = tpl.render(entries=entries)
Когда я набираю имя, отображаемое в интерпретаторе, я вижу снова одно и то же: u'Andr\xe9 T\xe9chin\xe9'
Теперь, если я напишу визуализированную переменную в имя файла, как это, он отобразится правильно:
with codecs.open('out.txt', 'a', 'utf-8') as f:
f.write(rendered)
Но я должен отправить его на форум:
3) В коде запроса POST у меня есть:
params = {u'post': rendered}
headers = {u'content-type': u'application/x-www-form-urlencoded'}
session.post(posturl, data=params, headers=headers, cookies=session.cookies)
Сеанс - это сеанс запросов.
И имя отображается в сообщении форума. Я пробовал следующее:
- Оставьте заголовки
- Кодировать rendered как rendered.encode('utf-8') (тот же результат)
- rendered = urllib.quote_plus (отображается) (выводится как все% XY)
Если я нахожу rendered.encode('utf-8'), я вижу следующее:
'Andr\xc3\xa9 T\xc3\xa9chin\xc3\xa9'
Как я могу исправить проблему? Спасибо.