我正在为我们的图书馆员开发一个报告应用程序(使用Django编写),以解决我们在某些实验室遇到的一些问题(我在大学工作)。为此,我创建了一个列出所有有问题实验室的页面。我正在测试添加注释,它完美无缺。除了UTF8字符。而且我不知道(还)该过程的哪个部分失败了。
问题:è字符在HTML页面中打印为è。
这是我的个人'追溯':
LANG
为en_US.UTF-8
annotation.text = u'2ème commentaire'
添加了注释(python manage.py shell_plus
)DEFAULT_CHARSET="utf-8"
,但没有任何更改。character_set_database
是utf8
。 SELECT
显示正确的文字。direct_to_template
。<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
,我使用{{ annotation.text|escape }}
打印注释。问题似乎出现在第5-6步,但我不知道如何抓住它 - 显然 - 如何纠正它。你有什么想法吗?
由于
PS:如果你愿意,我可以为你提供更多的代码,但它更容易让你感到困惑(因为我认为数据库结构很奇怪)。
ANSWER (由于我的代表不到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'
显然,表示字符串的'u'是UTF-8是'过度杀伤'。有两种方法可以用UTF-8编码相同的char(如果我正确理解了我读到的内容):
In [37]: print('\xc3\xa8').decode('utf8')
è
In [38]: print(u'\xe8')
è
In [39]: print(u'\xc3\xa8')
è
我只是选择了两者的混合,而且......好吧,这是错误的。
无论如何,谢谢你的答案!
答案 0 :(得分:1)
您的模板(HTML文件本身)是否以UTF-8编码?