【问题标题】:How to render umlauts with jinja2?如何用 jinja2 渲染变音符号?
【发布时间】:2018-06-28 23:12:34
【问题描述】:

我正在尝试用 jinja2 渲染一些基本的变音符号。

test.html

<!doctype html>
<link type="text/css" rel="stylesheet" href="style.css"/>
<meta charset="UTF-8">
<h3>Umlauts: ä ü ö</h3>

Result.html

<!doctype html>
<link type="text/css" rel="stylesheet" href="style.css"/>
<meta charset="UTF-8">
<h3>Umlauts: ä ü ö</h3>

我的代码

from jinja2 import Template

file = open("test.html")
data = file.read()
Template(data).stream().dump("index.html")

现在我不明白如何让 jinja 正确处理变音符号。我怎样才能做到这一点?我正在使用流,因为在我的实际用例中,我提供了一些数据来填写,然后将其转储到要显示的 html 中。

编辑:我想要的甚至可能吗?据我从here 了解到,不是吗?

无法使用 Jinja2 处理非 Unicode 数据。这 原因是 Jinja2 已经在语言上使用了 Unicode 等级。例如 Jinja2 将不间断空格视为有效 需要了解编码的表达式中的空格 或对 Unicode 字符串进行操作。

【问题讨论】:

  • 您几乎肯定想在此处指定编码,详见the documentation for dump
  • 这没有帮助。
  • &lt;head&gt; and &lt;body&gt; 呢?
  • 不。这也没有用。
  • 您如何检查输出文件?这看起来好像您只是使用为 Latin-1 配置的查看器来查看实际上完全正确 UTF-8 的文本。另请参阅Stack Overflow character-encoding tag info page,它更详细地解释了这一点。

标签: python jinja2 diacritics


【解决方案1】:

使用 Python3,您可以使用 open 指定编码。

from jinja2 import Template

file = open("test.html", 'r', encoding='utf-8')
data = file.read()
Template(data).stream().dump('index.html')

对于 Python2,您可以使用 io 模块来指定编码。

import io

file = io.open("test.html", 'r', encoding='utf-8')

【讨论】:

  • 啊啊是我的问题,谢谢,我感觉这是 jinja 的问题。
  • @Hakaishin: dump() 在写作时默认使用UTF-8,所以是的,您的问题在于输入。如果您使用的是 Python 3,open() 函数 io.open() 函数相同,您只是忘记指定正确的编码(此时使用系统默认值) .
  • @Hakaishin:事实上,我几乎可以肯定你必须使用 Python 3,否则你会遇到解码错误。
  • @Hakaishin,Martijn Pieters 是正确的。我相应地编辑了我的答案。
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 2018-07-29
  • 2022-01-01
相关资源
最近更新 更多