烧瓶(使用jinja2)使用'windows-1251'编码渲染模板?

时间:2012-11-09 06:51:44

标签: python crystal-reports flask jinja2

我为相当旧的报告系统编写了一个简单的前端,该系统使用Crystal Reports 8 Web组件服务器。 我需要向此Web组件发出“POST”请求。当我从使用标准UTF-8编码的页面发出请求时,所有表单数据也以UTF-8传递。这就是问题所在,因为CR8 Web组件服务器不理解UTF-8(或是它,我错了?)。 我试图将accept-charset="ISO-8859-5"accept-charset="windows-1251"放在参数中并且没有运气。

以下是更多信息,这可能很有用:

  • 此前端将在带有IIS6的Windows Server 2003上运行,
  • 只有合适的浏览器是IE,因为CR8 Web Component Server使用ActiveX组件。 (还有一个java插件,但由于某些原因它根本不起作用。)

所以我需要使用'windows-1251'编码来渲染模板(jinja2),因为参数名称和值可以包含西里尔字符。有什么方法可以实现这个目标吗?

3 个答案:

答案 0 :(得分:1)

我发现了一个简单的(甚至可能是愚蠢的)解决方案。 而不是return render_template('template.html', params**),我手动创建请求并将请求数据和标题设置为我需要的。

它看起来像那样:

r = Response()
    r.headers['Content-Type'] = 'text/html; charset=windows-1251'
    r.data = render_template('template.html', param1 = data).encode('cp1251')

看起来像一个肮脏的黑客,但它的确有效。

答案 1 :(得分:0)

如果您正在使用烧瓶,请阅读:

http://flask.pocoo.org/docs/unicode/

答案 2 :(得分:0)

在我的例子中,loaders.py 在几个地方有一个硬编码“utf-8”,我用“windows-1251”代替,对我来说一切正常!