2012-06-06 46 views
0

我目前正在致力於爲我們的圖書管理員製作一個報告應用程序(使用Django編寫),以解決我們與某些實驗室(我在大學工作)有關的一些問題。爲此,我創建了一個列出所有有問題的實驗的頁面。我正在測試添加註釋,它完美地工作。除了UTF8字符。而且我還不知道該流程的哪部分失敗。僅在Django模板中破解的UTF-8字符

問題:è char在HTML頁面中打印爲Ã

這是我個人的 '回溯':使用Terminal.app(這是UTF-8)通過SSH

  1. 我連接到我的測試服務器
  2. 服務器的LANGen_US.UTF-8
  3. 我添加了註釋(annotation.text = u'2ème commentaire'),通過python manage.py shell_plus啓動ipython
  4. 我試着在我的設置中添加DEFAULT_CHARSET="utf-8",沒有任何改變。
  5. 我檢查了MySQL的配置:character_set_databaseutf8。 A SELECT顯示正確的文本。
  6. 在我的views.py中,我只是從DB獲取註釋並對它們進行排序。然後我用包含數據的字典撥打direct_to_template
  7. 在我的模板中,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') 
è 

我只是選擇了這兩者的組合,和......嗯,那是錯誤的。

無論如何感謝您的答案!

+0

當您查看'工具 - >編碼時,瀏覽器中檢查的編碼是什麼? – Esailija

+0

Firefox告訴我UTF-8是頁面編碼。 – Cranium

回答

1

你的模板(HTML文件本身)是用UTF-8編碼的嗎?

+0

我嘗試過,但沒有改變一件事。我選擇你的答案作爲接受的答案,以表示其他答案已被找到,這是真的,即使它不是你的答案。無論如何,感謝您的迴應! – Cranium