我在处理从 Google 导入的数据(通过 gdata api)的 Django 应用程序时遇到问题。基本上,从 Google 导入的每个文本在我的页面上都显示有编码问题(例如:“Ceará State”显示为“Ceará State”)。
mysql 数据库上的环境设置为 uft-8,所有文本都在我的查询中正确显示,但在我对 Django shell 进行了一些试验后,事情开始变得有点奇怪:
我已经手动更改了其中一个文本,现在它在页面上显示时没有编码问题,但是 shell 回显的文本仍然类似于有编码问题的文本:
>>> 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 的 Apache 引起的。
请您参考如下方法:
如果我对你的理解正确,你在 shell 中打印标题时会出错,所以试试这个
print v1.title.encode('utf-8')
