我在Python语言中遇到了一个奇怪的__future__.unicode_literals问题。在不导入unicode_literals的情况下,我会得到正确的输出:
# encoding: utf-8
# from __future__ import unicode_literals
name = 'helló wörld from example'
print name但是当我添加unicode_literals导入时:
# encoding: utf-8
from __future__ import unicode_literals
name = 'helló wörld from example'
print name我得到了这个错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 4: ordinal not in range(128)unicode_literals是否将每个字符串都编码为utf-8?我应该怎么做才能覆盖这个错误?
发布于 2014-04-30 00:22:28
您的终端或控制台无法让Python知道它支持UTF-8。
如果没有UTF行,您将构建一个包含from __future__ import unicode_literals -8编码字节的字节字符串。使用该字符串,您将构建一个unicode字符串。
print必须以不同的方式对待这两个值;字节字符串被原封不动地写入sys.stdout。Python字符串首先被编码成字节,然后unicode查询sys.stdout.encoding。如果您的系统不能正确地告诉Python它支持的编解码器,则默认使用ASCII。
您的系统无法告诉Python使用哪个编解码器;sys.stdout.encoding被设置为ASCII值,并且对unicode值进行编码打印失败。
可以通过在打印时手动编码为UTF-8来验证这一点:
# encoding: utf-8
from __future__ import unicode_literals
name = 'helló wörld from example'
print name.encode('utf8')您也可以通过创建不带from __future__ import语句的unicode文本来重现此问题:
# encoding: utf-8
name = u'helló wörld from example'
print name其中u'..'也是unicode文本。
如果没有关于您的环境的详细信息,就很难说出解决方案是什么;这在很大程度上取决于所使用的操作系统和控制台或终端。
https://stackoverflow.com/questions/23370025
复制相似问题