我有一個Django應用程序處理從Google導入的數據(通過gdata api)的問題。基本上,從Google導入的每個文本都會在我的頁面上顯示編碼問題(例如:'CearáState'顯示爲'CearáState')。Django和MySql - 編碼困難
MySQL數據庫上的enconding設置爲UFT-8和所有的文本都在我的查詢正確顯示,但事情開始變得有點怪異我做了一些嘗試用Django的後殼:
我已經改變了這些文本由手之一,現在它顯示在頁面上沒有編碼的問題,而是由外殼呼應的文本仍然類似於編碼問題的:
>>> v1
<Video: São Paulo is awesome!>
>>> v1.title
u'S\xe3o Paulo is awesome!'
>>> v2
<Video: Ceará State>
>>> v2.title
u'Cear\xc3\xa1 State'
如果我嘗試打印正文:
print v1.title
Traceback (most recent call last):
File "<console>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe3' in position 1: ordinal not in range(128)
有什麼想法發生了什麼,我該如何解決它?謝謝。
編輯:
我寫了一個很愚蠢的函數來處理我的問題,而有沒有更好的解決辦法:
def normalize(s):
return s.encode('utf-8').replace('á', 'á').replace('ó', 'ó').replace('ç', 'ç').replace('ã', 'ã').replace('Ã', 'í')
EDIT 2:
問題是由阿帕奇造成這是不是設置爲使用UFT- 8。
我覺得你的shell不支持這些編碼,你有沒有顯示在模板這個數據? – Ahsan 2012-03-06 18:01:40
Ahsan - 是的。我用手修改了重音的標題正確顯示,而其他人用替換重音符的奇怪字符搞亂了。 – Raphael 2012-03-06 18:05:48
@Ahsan - 請注意,v1在shell上的unicode表示是正確的: <視頻:聖保羅真棒!>和v2的unicode表示形式變混淆了:<視頻:Ceará狀態> – Raphael 2012-03-06 18:35:33