Skip to main content
 首页 » 编程设计

python之Flask(使用 jinja2)可以使用 'windows-1251' 编码渲染模板吗

2025年05月04日9Terrylee

我为相当古老的报告系统编写了一个简单的前端,它使用 Crystal Reports 8 Web Component Server。 我需要向该 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 插件,但由于某些原因它根本不起作用)。

因此我需要 flask (jinja2) 来使用“windows-1251”编码呈现模板,因为参数名称和值可以包含西里尔字符。有什么办法可以做到这一点?

请您参考如下方法:

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

它看起来像这样:

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

看起来像一个肮脏的 hack,但它有效。