Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,直接打印对象和调用str函数后打印对象有什么区别_Python_Unicode - Fatal编程技术网

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

在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,

首先,我创建了一个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)
打印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。