我目前正在致力於爲我們的圖書管理員製作一個報告應用程序(使用Django編寫),以解決我們與某些實驗室(我在大學工作)有關的一些問題。爲此,我創建了一個列出所有有問題的實驗的頁面。我正在測試添加註釋,它完美地工作。除了UTF8字符。而且我還不知道該流程的哪部分失敗。僅在Django模板中破解的UTF-8字符
問題:è char在HTML頁面中打印爲Ã。
這是我個人的 '回溯':使用Terminal.app(這是UTF-8)通過SSH
- 我連接到我的測試服務器
- 服務器的
LANG
是en_US.UTF-8
- 我添加了註釋(
annotation.text = u'2ème commentaire'
),通過python manage.py shell_plus
啓動ipython - 我試着在我的設置中添加
DEFAULT_CHARSET="utf-8"
,沒有任何改變。 - 我檢查了MySQL的配置:
character_set_database
是utf8
。 ASELECT
顯示正確的文本。 - 在我的views.py中,我只是從DB獲取註釋並對它們進行排序。然後我用包含數據的字典撥打
direct_to_template
。 - 在我的模板中,HTML頁面字符集設置爲
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
,我用{{ annotation.text|escape }}
打印註釋。
該問題似乎出現在第5-6步,但我不知道如何捕捉它,顯然 - 如何糾正它。你有什麼主意嗎 ?
感謝
PS:如果你想我可以爲您提供更多的代碼,但它更可能混淆你(因爲DB結構是一種奇怪的,我認爲)。
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相同的字符(如果我理解正確的是我讀):
In [37]: print('\xc3\xa8').decode('utf8')
è
In [38]: print(u'\xe8')
è
In [39]: print(u'\xc3\xa8')
è
我只是選擇了這兩者的組合,和......嗯,那是錯誤的。
無論如何感謝您的答案!
當您查看'工具 - >編碼時,瀏覽器中檢查的編碼是什麼? – Esailija
Firefox告訴我UTF-8是頁面編碼。 – Cranium