首先我创建一个像<; 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)
为什么会出现此错误?打印呼叫功能,不是吗?
答案 0 :(得分:2)
打印呼叫功能,不是吗?
不,不是因为Unicode字符串,它不是。对于Unicode字符串,print
保留原样,并将值编码为sys.stdout
对象;此对象将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代码设置属性。