【问题标题】:Fix a UnicodeEncodeError caused by smart quotes修复一个由智能引号引起的 UnicodeEncodeError
【发布时间】:2011-11-07 18:06:36
【问题描述】:

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

我将问题归结为他添加到文档中的引号和撇号。 我已经阅读了很多有关此错误的信息,但我不确定在 python 中解决此问题的最佳方法是什么。

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

有人可以吗

  1. 解释发生了什么
  2. 提出问题的最佳解决方案

【问题讨论】:

  • 发布一些源代码 - 你没有提供足够的技术细节。什么会产生 UnicodeEncodeError? windows 编辑的文档是如何处理的?

标签: python django unicode latex


【解决方案1】:

不看一些代码是不可能解决这个问题的。但根据我的经验,Django 中的 10 个 unicode 错误中有 9 个是由 __unicode__ 方法引起的,该方法实际上并没有返回 Unicode。

例如:

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

因为字符串是字节字符串,而不是 unicode,所以每当 bar 字段包含来自外部 ASCII 的文本时,这将严重中断。应该是:

   return u'foo %s' % self.bar

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 2013-11-17
      • 2010-09-09
      • 2011-10-21
      • 2012-03-23
      • 2016-10-19
      相关资源
      最近更新 更多