如何在Django模板中使用法语字母?

5

我在一个 Django 模板中使用了一些法文字符(é, è, à...),但是在 Django 加载时,会出现 UnicodeDecodeError 异常。

如果我不加载模板,而直接使用 Python 字符串,则可以正常工作。

有什么办法可以让 Django 模板使用 Unicode 吗?

2个回答

7

你可能将模板存储在非Unicode编码中,例如latin-1。我相信Django默认情况下假定模板为UTF-8格式(尽管有一种设置可以覆盖此设置)。

你的编辑器应该能够以UTF-8编码保存模板文件(可能通过“另存为”页面上的下拉菜单实现,但这可能取决于您的编辑器)。重新保存文件为UTF-8,错误应该就会消失了。


2
琐事化:Latin-1 并不比 UTF-8 更“非 Unicode”。两者都不是 Unicode,而是编码方式。UTF-8 可以编码 Unicode 中的所有字符,而 Latin-1 不能,但它们仍然不是 Unicode。这并不影响你答案的有效性,我只是出于没有特别原因的琐碎。;) - Lennart Regebro
我非常支持严谨,但我应该指出我使用了“非Unicode编码”这个短语,而不仅仅是“非Unicode”,这是准确的。UTF-8确实是一种编码(多种之一),用于Unicode数据,而Latin-1则不是,因为它无法表示所有可能的Unicode代码点。 - Brian
我的IDE显示我的文件是UTF-8,只有在Notepad++中打开同一文件后,我才发现它实际上是UTF-8 without BOM。我将其保存为纯文本的UTF-8,然后它就可以工作了。 - darren

4
这是来自Django unicode documentation与您的问题相关的内容:
“但通常情况下,模板是从文件系统中读取的,这会造成一些复杂性:并非所有的文件系统都将数据编码为UTF-8。如果您的模板文件未以UTF-8编码存储,则需要将FILE_CHARSET设置为磁盘上文件的编码格式。当Django读取模板文件时,它将把数据从该编码转换为Unicode。(FILE_CHARSET默认设置为'utf-8')” DEFAULT_CHARSET设置控制呈现模板的编码格式。默认设置为UTF-8。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接