直接打印对象和在python中调用str函数后打印对象有什么区别

时间:2014-08-28 10:44:19

标签: python unicode

首先我创建一个像<; p>这样的unicode对象

test = u'\u015f\xfckr\xfc\xe7a\u011fl\xfcli'

当我打印这个对象时;

>>> print test
şükrüçağlüli

但是,当我运行此命令时,我得到一个UnicodeEncodeError;

>>> print str(test)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

为什么会出现此错误?打印呼叫功能,不是吗?

1 个答案:

答案 0 :(得分:2)

  

打印呼叫功能,不是吗?

不,不是因为Unicode字符串,它不是。对于Unicode字符串,print保留原样,并将值编码为sys.stdout对象;此对象将Unicode值编码为终端或控制台使用的编码。

Unicode值上的

str()隐式将其编码为ASCII。如果必须将Unicode值转换为字节字符串,请显式编码:

print test.encode('utf-8')

会将UTF-8字节写入终端。

写入sys.stdout完全相同,但使用sys.stdout.encoding而非硬编码编码。 sys.stdout.encoding反映了Python为您的终端或控制台检测到的编码。

请参阅file.encoding

  

此文件使用的编码。将Unicode字符串写入文件时,将使用此编码将它们转换为字节字符串。此外,当文件连接到终端时,该属性给出终端可能使用的编码(如果用户错误配置了终端,该信息可能是不正确的)。该属性是只读的,可能不存在于所有类文件对象上。它也可以是None,在这种情况下,文件使用系统默认编码来转换Unicode字符串。

file.encoding仅为sys.std*文件对象设置,您无法从Python代码设置属性。