首先,我现在只使用Python3.1;它的主要优点是从unicode对象中消除字节字符串的歧义。这使得绝大多数文本操作比以前安全得多。在有关python 2.x编码问题的数万亿用户问题中,python2.1的u'äbc约定只是一个错误;随着显式的bytes和bytearray,生活变得轻松多了。
其次,如果py3k不是您喜欢的,那么尝试使用from __future__ import unicode_literals,因为这将模拟py3k在python 2.6和2.7上的行为。这件事可以避免你在说print 'exámple'.upper()时犯的(容易犯的)错误。本质上,这与py3k中的相同:print( 'exámple'.encode( 'utf-8' ).upper() )。比较这些版本(对于py3k):print( 'exámple'.encode( 'utf-8' ).upper() )
print( 'exámple'.encode( 'utf-8' ).upper().decode( 'utf-8' ) )
print( 'exámple'.upper() )
第一个是,基本上,当使用裸字符串'exámple'时所做的事情,前提是将默认编码设置为utf-8(根据BDFL声明,在运行时设置默认编码是一个坏主意,因此在py2中,您必须通过说import sys; reload( sys ); sys.setdefaultencoding( 'utf-8' )来欺骗它;我为下面的py3k提供了一个更好的解决方案)。当您查看这三行的输出时:b'EX\xc3\xa1MPL