仅在Django模板中破坏的UTF-8字符

时间:2012-06-06 13:42:25

标签: python django utf-8 django-templates

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

问题:è字符在HTML页面中打印为è

这是我的个人'追溯':

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

    我只是选择了两者的混合,而且......好吧,这是错误的。

    无论如何,谢谢你的答案!

1 个答案:

答案 0 :(得分:1)

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