实际上,每当您不能同时100%地确定python的默认编码和字符串的确切内容时,使用str( text )
就是一个不好的主意-从互联网上获取的文本通常使用后者。 此外,根据您要执行的操作,使用print text.encode( 'utf-8' )
或print repr( text.encode( 'utf-8' ) )
可能会产生令人失望的结果,因为您可能会得到诸如2755980938986390590531之类的无法读取的代码点。
我认为最佳选择实际上是利用具有unicode功能的命令行(在Windows下困难,在Linux下容易)并从python 2.x切换到python3.x。 新的python 3系列所提供的文本与字节处理的简单明了,确实是您可以期待的一大收获。 这的确意味着您将不得不花一些时间来学习“字节”和“文本”之间的区别,并掌握字符编码的概念,但是那样的话,在python 3环境中花费的时间要多得多,因为python可以解决这些问题 令人烦恼的问题比python 2所提供的要清晰得多,并且不容易出错。 回想起来,我什至可以称呼python 2解决unicode问题的方法,尽管我曾经认为它是高级的,当我将它与php中解决此问题的方式进行比较时。
编辑我只是在这里进行了相关讨论,因此就这几天php似乎解决unicode / encoding问题的方式发现了此评论:
就像老鼠想吃东西一样 象。 通过将Unicode框架为 ASCII扩展名(我们有正常 字符串,我们有mb_strings) 以错误的方式解决问题,并且 挂在什么特殊情况上 需要处理字符 需要更多的有趣花体 一个字节。 如果您将Unicode视为 为任何人提供抽象空间 您需要的字符,ASCII是 无需任何住宿 将其视为特例。
我在这里引用这是因为,根据我的经验,所有SO python + unicode主题中的90%似乎来自那些过去对ascii或latin-1都比较满意的人,被那些通常情况下不支持的偶尔性格所咬, 然后基本上只是想摆脱它。 切换到python 3时的操作恰恰是上面的注释者建议的操作:您不再将unicode视为ascii的令人讨厌的扩展,而是开始将ascii(以及几乎所有您将遇到的其他编码)视为子集。 )。
确实,unicode v6当然不是编码中的硬道理,但它几乎像2011年一样具有通用性。要习惯它。