Python程序在Eclipse中工作,但在我直接运行时却没有(Unicode的东西)

时间:2012-09-02 09:08:41

标签: python eclipse unicode wxpython

我搜索并发现了一些相关的问题,但他们处理Unicode的方式不同,所以我不能将解决方案应用到我的问题中。

我不会粘贴我的整个代码,但我确定这个孤立的示例代码会复制错误: (我也在使用wx进行GUI,所以这就像在一个类中一样)

#coding: utf-8
...
something = u'ЧЕТЫРЕ'
//show the Russian text in a Label on the GUI
self.ExampleLabel.SetValue(str(self.something))

在Eclipse上,一切都运行良好,并显示俄语字符。但是,当我尝试直接在文件中打开Python时,我在CL上得到了这个错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-11: 
ordinal not in range(128)

我认为这与CL无法输出Unicode字符和Eclipse做幕后魔术有关。有关如何制作它以使其独立工作的任何帮助吗?

3 个答案:

答案 0 :(得分:5)

当你在没有指定编码的情况下调用str()时,会使用默认编码,这取决于程序运行的环境。在Eclipse中,这与命令行不同。

不要依赖默认编码,而是明确指定:

self.ExampleLabel.SetValue(self.something.encode('utf-8'))

您可能需要研究Python Unicode HOWTO以了解编码和str()对unicode对象的作用。 wxPython项目也有page on Unicode usage

答案 1 :(得分:1)

请尝试self.something.encode('utf-8')

答案 2 :(得分:1)

如果您使用repr而不是str,它应该为您处理转换,并且还涵盖了对象并不总是字符串类型的情况,但您可能会发现它为您提供了额外的引号集,甚至是unicode u在你的背景下。 repr比str-str假设ascii编码更安全,但是repr会以你在代码中看到它们的方式显示你的代码点,因为使用eval包装应该将它转换回原来的状态 - repr必须以python代码所在的形式,即ascii安全,因为大多数python代码都是用ascii编写的。