在python中,直接打印对象和调用str函数后打印对象有什么区别
首先,我创建了一个unicode对象,如:在python中,直接打印对象和调用str函数后打印对象有什么区别,python,unicode,Python,Unicode,首先,我创建了一个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,
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)
打印str(测试)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
UnicodeEncodeError:“ascii”编解码器无法对位置0-1中的字符进行编码:序号不在范围内(128)
为什么会出现这种错误?打印调用str函数,不是吗
打印调用str函数,不是吗
不,不是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为您的终端或控制台检测到的编码
见:
此文件使用的编码。将Unicode字符串写入文件时,它们将使用此编码转换为字节字符串。此外,当文件连接到终端时,该属性提供终端可能使用的编码(如果用户错误配置了终端,则该信息可能不正确)。该属性是只读的,可能不会出现在所有类似文件的对象上。它也可以是None,在这种情况下,文件使用系统默认编码转换Unicode字符串
file.encoding
仅为sys.std*
文件对象设置,不能从Python代码中设置属性。Unicode primer:此行为是否与Python 2和3相关?@SylvainLeroux:updated;编码实际上由文件对象负责;这适用于Python2和Python3。