Skip to main content
 首页 » 编程设计

python之Django 和 MySql之编码困难

2025年05月04日30softidea

我在处理从 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')