以下代码适用于Python3:
people = [u'Nicholas Gyeney', u'Andr\xe9']
writers = ", ".join(people)
print(writers)
print("Writers: {}".format(writers))
并产生以下输出:
Nicholas Gyeney, André
Writers: Nicholas Gyeney, André
但是,在Python2.7中,我得到了以下错误:
Traceback (most recent call last):
File "python", line 4, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9'
in position 21: ordinal not in range(128)
我可以通过将", ".join(people)
更改为", ".join(people).encode('utf-8')
来修复此错误,但如果这样做,Python 3中的输出将更改为:
b'Nicholas Gyeney, Andr\xc3\xa9'
Writers: b'Nicholas Gyeney, Andr\xc3\xa9'
所以我尝试使用以下代码:
if sys.version_info < (3, 0):
reload(sys)
sys.setdefaultencoding('utf-8')
people = [u'Nicholas Gyeney', u'Andr\xe9']
writers = ", ".join(people)
print(writers)
print("Writers: {}".format(writers))
这使得我的代码可以在所有版本的Python中工作。但我是用setdefaultencoding
is discouraged读的。
处理这个问题的最佳方法是什么?
在Python2中,应该为
join
和print
使用unicode字符串:格式化时可以提供Unicode前缀:
这确实解决了这个问题,但是,您在Python 3脚本中添加了不必要的
u''
前缀。在检查了版本之后,您也可以
from __future__ import unicode_literals
,但我不会这样做,使用它通常比较困难,而且由于u''
前缀可以充分完成此工作,因此已被认为是不推荐的。相关问题 更多 >
编程相关推荐