0

我目前正在为我们的图书馆员开发一个报告应用程序(使用 Django 编写),以解决我们在某些实验室遇到的一些问题(我在一所大学工作)。为此,我创建了一个页面,列出了所有有问题的实验室。我正在测试添加注释,效果很好。UTF8 字符除外。而且我不知道(还不)该过程的哪一部分失败了。

问题:è char在 HTML 页面中打印为è 。

这是我个人的“追溯”:

  1. 我使用 Terminal.app(UTF-8 格式)通过 SSH 连接到我的测试服务器
  2. 服务器LANGen_US.UTF-8
  3. 我添加了启动 ipython的注释 ( annotation.text = u'2ème commentaire')python manage.py shell_plus
  4. 我尝试添加DEFAULT_CHARSET="utf-8"我的设置,没有任何变化。
  5. 我检查了 MySQL 的配置:character_set_databaseutf8. ASELECT显示正确的文本。
  6. 在我的views.py 中,我只是从数据库中获取注释并对其进行排序。然后我direct_to_template用包含数据的字典调用。
  7. 在我的模板中,HTML 页面字符集设置为<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />,我使用{{ annotation.text|escape }}.

问题似乎出现在第 5-6 步,但我不知道如何抓住它,而且——显然——如何纠正它。你有什么主意吗 ?

谢谢

PS:如果您愿意,我可以为您提供更多代码,但这更有可能使您感到困惑(因为我认为 DB 结构有点奇怪)。


回答 (由于我的代表少于 10 个,我现在无法回答自己,所以我在下面发布答案。)

我终于找到了答案!

In [13]: annotation.text
Out[13]: u'2\xc3\xa8me commentaire'

In [14]: annotation.text = '2ème commentaire'
In [15]: annotation.save()
In [16]: annotation.text
Out[16]: '2\xc3\xa8me commentaire'

显然,表示字符串采用 UTF-8 格式的“u”是“矫枉过正”。有两种方法可以在 UTF-8 中编码相同的字符(如果我正确理解了我读到的内容):

In [37]: print('\xc3\xa8').decode('utf8')
è

In [38]: print(u'\xe8')
è

In [39]: print(u'\xc3\xa8')
è

我只是选择了两者的混合,而且……嗯,那是错误的。

无论如何感谢您的回答!

4

1 回答 1

1

您的模板(HTML 文件本身)是否以 UTF-8 编码?

于 2012-06-06T14:26:30.453 回答