【问题标题】:Django getting encoding error only on command lineDjango 仅在命令行上出现编码错误
【发布时间】:2013-06-05 10:47:55
【问题描述】:

我有一个读取 XML 文件并将其写入数据库的脚本。
当我通过浏览器运行它(通过视图调用它)它工作正常,但
当我为它创建命令 (./manage.py importxmlfile) 时,我收到以下消息:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 6: ordinal not in range(128)

我不确定为什么它只会在通过命令行调用导入时发生..有什么想法吗?

更新
我正在尝试将lxml.etree._ElementUnicodeResult 对象转换为字符串并使用str(result) 将其保存在数据库(utf8 排序规则)中。
这只会在命令行上产生上述错误。

【问题讨论】:

  • 你能发布你的源代码吗?
  • 这是一个相当庞大的项目,并不是一个真正的选择。
  • 奇怪,当我在 Eclipse 上调试它时它可以工作,但使用 Konsole 就不行
  • 尝试在命令文件的底部添加# -*- coding: utf-8 -*-。对于您的对象的 unicode 方法,请尝试返回 unicode 字符串:return u"%s" %(self.param)
  • 好像没有效果

标签: python django unicode encoding


【解决方案1】:

啊,不要用str(result)

改为:

result.encode('utf-8')

当你调用str(result) 时,python 将使用默认的系统编码(通常是 ascii)来尝试对result 中的字节进行编码。如果ordinal not in range(128),这将中断。而不是使用 ascii 编解码器,只需 .encode() 并告诉 python 使用哪个编解码器。

查看Python Unicode HowTo 了解更多信息。您可能还想查看 this related questionthis excellent presentation 的主题。

【讨论】:

  • 我必须确保在使用正则表达式(在外部函数上)和其他一些预保存函数时使用它,但它就像一个魅力。
猜你喜欢
  • 2013-07-16
  • 2013-11-15
  • 1970-01-01
  • 2012-06-16
  • 2015-12-27
  • 1970-01-01
  • 2010-12-02
  • 2013-07-11
  • 1970-01-01
相关资源
最近更新 更多