UTF8字符仅在Django temp中损坏

2024-05-23 14:00:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

问题:。在

这是我的个人“回溯”:

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

问题似乎出现在第5-6步,但我不知道如何抓住它,很明显,如何纠正它。你知道吗?在

谢谢

PS:如果你想的话,我可以提供更多的代码,但这更容易让你困惑(因为我觉得数据库结构有点奇怪)。在


回答 (由于我的重复次数不到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(如果我正确理解我所读的内容):

^{pr2}$

我只是选择了两者的混合,然后。。。好吧,那是错的。在

无论如何,谢谢你的回答!在


Tags: 答案textinpy服务器数据库格式页面