修复由智能引号引起的UnicodeEncodeError

时间:2011-11-07 18:06:36

标签: python django unicode latex

我正在开发一个涉及自动生成文档的项目(通过乳胶)。创建这些文档的人正在使用Windows机器(他正在使用Microsoft的单词,但现在他正在使用记事本编辑它们)。无论如何,我注意到有时在他编辑文档后,整个生成过程因Python UnicodeEncodeError而失败。

我将问题追溯到他已添加到文档中的引号和撇号组。 我已经阅读了很多关于这个错误的内容,但我不确定在python中解决这个问题的最佳方法是什么。

这是一个Django应用程序,所以我尝试使用django.utils.encode中的force_unicode,smart_str等,但这不起作用。我不知道为什么他添加的字符与我在不同操作系统上添加的字符不同。

有人可以

  1. 解释发生了什么
  2. 建议解决问题的最佳方法

2 个答案:

答案 0 :(得分:3)

如果没有看到某些代码,就无法解决这个问题。但根据我的经验,Django中十分之九的unicode错误是由__unicode__方法引起的,该方法实际上并不返回Unicode。

例如:

def __unicode__(self):
   return 'foo %s' % self.bar

因为字符串是字节字符串而不是unicode,所以只要bar字段包含来自外部ASCII的文本,这就会破坏。它应该是:

   return u'foo %s' % self.bar

答案 1 :(得分:1)

有问题的引号极有可能使用非标准Windows-1252代码点分配。尝试将django应用程序中的“latin1”和/或“iso-8859-1”的所有实例更改为“windows-1252”。