我有一个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