【问题标题】:Strange behavior of pydev with unicode带有 unicode 的 pydev 的奇怪行为
【发布时间】:2013-03-13 01:22:59
【问题描述】:

我正在尝试修复 python 项目中的错误。当客户端在使用 PyQt 编写的程序中输入一些 utf8 字符(如 'é')时,会出现错误。客户端以控制台模式执行程序(激活virtualenv并执行脚本main.py) 但是当我在 Eclipse 和 Pydev 下运行相同的程序时,我无法重现问题(一切正常)。此外,我确信 Eclipse 使用与客户端相同的 virtualenv。 在 Eclipse 中运行程序怎么可能与在命令行中运行不同呢? 谢谢,

【问题讨论】:

  • 错误信息是什么?
  • 这是捕获错误except ValueError: QMessageBox.warning(self, "Value Error", "Error in the type of the value", buttons=QMessageBox.Ok)的代码
  • 如果这是 Windows 命令行,Windows 不使用 utf-8。它有一些代码页,可以将每个字符转换成。
  • 不,我在 Debian 上运行它,但我尝试手动打印回溯至 Traceback (most recent call last): File "/home/hnng/workspace/dxp_valoris/valoris_super/tables.py", line 202, in udpateValues setattr(elem, fieldName_id, unicode(str(widget.toPlainText()))) UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128) `
  • pydev 将默认编码设置为“utf8”...控制台通常是 ascii,您需要执行类似user_value = user_value.decode('utf8') 或类似的操作... pydev 试图通过显示来提供帮助utf8 字符...但是当它不反映现实世界时,它真的很令人沮丧...

标签: python pydev


【解决方案1】:

根据您的评论,有一些事情正在发生。首先,toPlainText 已经返回了一个 unicode 对象。所以问题就在这里:

>>> str("é")
'\x82'
>>> unicode(str("é"))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 0: ordinal
not in range(128)

根据http://docs.python.org/2/howto/unicode.html,“如果省略编码参数,则使用ASCII编码进行转换,因此大于127的字符将被视为错误”。

所以如果你还需要编码,那么添加一个 encoding1 参数,比如:

>>> unicode(str("é"), 'latin_1')
u'\x82'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 2011-03-16
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多