【发布时间】:2013-06-29 08:24:30
【问题描述】:
版本:Python 2.7.3
其他库:Python-Requests 1.2.3、jinja2 (2.6)
我有一个向论坛提交数据的脚本,但问题是非 ascii 字符显示为垃圾。例如,像 André Téchiné 这样的名字出现为 André© Téchiné。
提交数据的方式如下:
1) 数据最初是从 UTF-8 编码的 CSV 文件加载的,如下所示:
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 来自 Python CSV 文档页面底部: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.encode('utf-8')(结果相同)
- rendered = urllib.quote_plus(rendered) (全部显示为 %XY)
如果我输入 render.encode('utf-8') 我会看到以下内容:
'Andr\xc3\xa9 T\xc3\xa9chin\xc3\xa9'
我该如何解决这个问题?谢谢。
【问题讨论】:
标签: python python-2.7 python-requests