【问题标题】:Django and MySql - Encoding difficultiesDjango 和 MySql - 编码困难
【发布时间】:2012-03-06 17:54:13
【问题描述】:

我在处理从 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不支持这些编码,你有没有在模板上显示这些数据?
  • 阿山 - 是的,我做到了。我为修复重音而手动更改的标题正确显示,而其他标题则被替换重音的奇怪字符弄乱了。
  • @Ahsan - 请注意,shell 上 v1 的 unicode 表示是正确的: v2 的 unicode 表示是一团糟:

标签: python django encoding utf-8


【解决方案1】:

如果我理解正确,你在 shell 中打印标题时会出错,所以试试这个

print v1.title.encode('utf-8')

【讨论】:

  • 我的错误不仅仅在shell中。我的模板上的文本也显示错误。我已经尝试过这个功能,但它把我的字符串弄得更乱了。
  • 我正在开发一个非常愚蠢的函数来处理我的问题:def normalize(s): return s.encode('utf-8').replace('á', 'á' ).replace('ó', 'ó').replace('ç', 'ç').replace('ã', 'ã').replace('Ã', 'í')
  • 如果 google api 返回的不是这些字符怎么办,这对那些字符不起作用。如果您忽略这些非 ascii 字符,例如 'á' 这将是 'A' 等,一个可能是解决方案。
  • 问题是 Apache 没有设置为 uft-8,这弄乱了与 Google 的集成。将 apache 设置为使用 utf-8 后,从 Google 获取的新数据正确显示,我使用我的哑函数修复以前导入的数据。
猜你喜欢
  • 2016-12-24
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
相关资源
最近更新 更多