我有一个Python应用程序,可以从网站获取多语言信息,并在一个小的GUI窗口(基于wxpython)中显示它们。 我(目前)不在我的源文件中使用任何特定的unicode语句。
现在,当我从Eclipse中运行我的python应用程序时,很好地显示了法语字符(如ë),当我从py2exe打包版本运行它时,该字符变得很糟糕。 我真的不明白为什么使用py2exe构建不会产生unicode或编码相关的错误。
但是,要解决此问题,并在this文章之后,我将字符串包装在unicode(my_string, "utf-8")
调用中,然后再将其输出到屏幕。这解决了它。
问题:
unicode()
调用中包装字符串? 我试过围绕unicode多次缠绕我的脑袋,但似乎我不兼容unicode: - |
答案 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对象。