Python,unicode支持的最佳方法?

时间:2011-05-30 10:42:00

标签: python unicode py2exe

我有一个Python应用程序,可以从网站获取多语言信息,并在一个小的GUI窗口(基于wxpython)中显示它们。 我(目前)不在我的源文件中使用任何特定的unicode语句。

现在,当我从Eclipse中运行我的python应用程序时,很好地显示了法语字符(如ë),当我从py2exe打包版本运行它时,该字符变得很糟糕。 我真的不明白为什么使用py2exe构建不会产生unicode或编码相关的错误。

但是,要解决此问题,并在this文章之后,我将字符串包装在unicode(my_string, "utf-8")调用中,然后再将其输出到屏幕。这解决了它。

问题:

  • 在显示好方法之前,是否在unicode()调用中包装字符串?
  • 为什么没有从Eclipse中进行unicode转换,而不是从Windows打包的.exe版本转换?

我试过围绕unicode多次缠绕我的脑袋,但似乎我不兼容unicode: - |

3 个答案:

答案 0 :(得分:6)

最好的方法是尽快确保字符串是 。如果您正在使用unicode来扫描网站,那么他们就没有做他们应该做的事情(imho)。然后,您必须使用与您正在使用的网页相同的编码将它们解码为unicode。

你的方法基本上是相反的,尽可能晚地解码。它到目前为止工作基本上只是纯粹的运气,因为你还没有遇到任何非utf8字符串。任何iso-8859-1字符串都会破坏你的应用程序。

答案 1 :(得分:1)

  

为什么没有Eclipse内部的unicode转换,而不是Windows打包的.exe版本?

我假设您在Eclipse中使用PyDev?

最近发生在我身上,PyDev将sys.getDefaultEncoding()更改为“utf-8”。这意味着默认情况下,UTF-8中的文件(或其他任何内容)的读写操作。但是一旦我从控制台启动它,它就恢复了操作系统默认值(例如Windows的ascii

声明字符串的好习惯是在它之前添加u

u"the string"

这样字符串是UTF-8。它在Python 3 +

中成为默认值

答案 2 :(得分:0)

我可能错了,但我认为它在Eclipse中工作,因为默认情况下使用UTF-8工作而py2exe生成Windows可执行文件,即Latin-1。

通过使用unicode(a_string, "UTF-8"),您可以使用UTF-8编码显式创建Python unicode对象。因此,解释器在使用对象时采用此编码。

unicode对象可以在很多方法/函数/类中透明地用作字符串,包括print。无论如何,要注意有时候,你必须使用string作为函数参数。

你把你的文件的@top放到# -*- coding: utf-8 -*-,它向解释器指出“这个文件中的任何字符串都是UTF-8”吗?

它可以让你避免将字符串显式转换为unicode对象。