Python,支持unicode的最佳方法?

Python,支持unicode的最佳方法?,python,unicode,py2exe,Python,Unicode,Py2exe,我有一个Python应用程序,它可以从网站获取多语言信息,并在一个小型GUI窗口(基于wxpython)中显示这些信息。 我(目前)没有在源文件中使用任何特定的unicode语句 现在,当我在Eclipse中运行python应用程序时,法语字符(如ë)显示得很好,当我在py2exe打包版本中运行它时,字符会变得不稳定。 我真的不明白为什么使用py2exe的建筑不会产生unicode或编码相关的错误 然而,为了解决这个问题,在接下来的文章中,我在将字符串输出到屏幕之前,将其包装在一个unicode

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

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

然而,为了解决这个问题,在接下来的文章中,我在将字符串输出到屏幕之前,将其包装在一个
unicode(my_string,“utf-8”)
调用中。这就解决了问题

问题:

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

我已经尝试过多次使用unicode,但似乎我不兼容unicode:-|

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


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

我可能错了,但我认为它在Eclipse中工作,因为默认情况下在UTF-8中工作,
py2exe
生成的Windows可执行文件是拉丁文-1

通过使用
unicode(一个字符串,“UTF-8”)
,您可以使用UTF-8编码显式地创建一个Python unicode对象。因此,解释器在使用对象时采用这种编码

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

您是否在文件的顶部放置了某种
#-*-编码:utf-8-*-
,向解释器指示“此文件中的任何字符串都是utf-8”

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

为什么它在Eclipse中没有unicode转换,而在windows打包的.exe版本中没有unicode转换

我假设您正在Eclipse中使用PyDev

最近,PyDev将sys.getDefaultEncoding()更改为“utf-8”。这意味着在UTF-8中默认情况下,从文件(或任何其他文件)进行读写操作。但是,一旦我从控制台启动它,它就回到了操作系统的默认设置(例如,对于Windows来说,
ascii

声明字符串的最佳实践是在其前面放置
u

u"the string"

所以字符串是UTF-8。它在Python 3+中成为默认值。

好吧,我使用
urllib2.urlopen()
获取,我使用Beautiful Soup解析它。根据,它应该始终返回unicode。但是,如果我对任何一个Beuatiful Soup返回的最终值执行
键入(值)
,我得到的是
,而不是预期的
(当我执行
打印值时,它不会在字符串前面加上
u
)。因此,我不相信从那时起我真的在使用unicode。尽管文档上说(Soup提供unicode,该死),但在很多情况下,BeautifulSoup不返回unicode,请参阅。IMHO lxml工作得更好,在抓取方面更一致。是的,我刚刚发现了一个相关的SO post:它确实描述了相同的问题:
renderContents()
(我正在使用)返回一个字符串而不是unicode。我发现下面的演示非常好:正如我所理解的
-*-编码:utf-8-*-
行,这仅用于支持用unicode编写的/code/,而不是它处理的数据