python是否自动解码ASCII和UTF-8字节字符串?

python是否自动解码ASCII和UTF-8字节字符串?,python,byte,Python,Byte,据我所知,Python3字符串是一个字节序列,已解码为人类可读,而Python3字节对象是非人类可读的原始字节。然而,我很难理解的是,用UTF-8或ASCII编码的字符串如何显示为以b为前缀的字符串,而不是字节序列 string=“我是一个字符串” #打印一个字节序列,就像我期望的那样 字符串编码(“UTF-16”) b'\xff\xfeI\x00\x00a\x00m\x00\x00a\x00\x00s\x00t\x00r\x00i\x00n\x00g\x00' #打印一系列人类可读的字符,我不

据我所知,Python3字符串是一个字节序列,已解码为人类可读,而Python3字节对象是非人类可读的原始字节。然而,我很难理解的是,用UTF-8或ASCII编码的字符串如何显示为以b为前缀的字符串,而不是字节序列

string=“我是一个字符串”
#打印一个字节序列,就像我期望的那样
字符串编码(“UTF-16”)
b'\xff\xfeI\x00\x00a\x00m\x00\x00a\x00\x00s\x00t\x00r\x00i\x00n\x00g\x00'
#打印一系列人类可读的字符,我不懂
字符串编码(“UTF-8”)
“我是一根绳子”

为什么UTF-8或ASCII编码的字符串不显示字节序列?

UTF-8是一个向后兼容的ASCII超集,即任何有效的ASCII都是有效的UTF-8,ASCII中的所有内容都由UTF-8使用与ASCII相同的字节进行编码。所以它不是“UTF-8或ASCII”,而是“只是一些ASCII”。请尝试其他Unicode:

>>> "café".encode("UTF-8")
b'caf\xc3\xa9'
或其他字符形式的ASCII码,这对查看字符形式没有多大帮助:

>>> "hello\f\n\t\r\v\0\N{SOH}\N{DEL}".encode("UTF-8")
b'hello\x0c\n\t\r\x0b\x00\x01\x7f'
bytes
repr
在可能的情况下显示可打印字符而不是
\xnn
转义的原因是,如果恰好有包含ASCII的字节,这会很有帮助

当然,它仍然是一个格式良好的
bytes
literal:

>>> b'I am a string'[0]
73
另外:从

虽然字节文字和表示基于ASCII文本, 字节对象实际上表现为不可变的整数序列,
序列中的每个值都受到限制,因此0“为什么由UTF-8或ASCII编码的字符串不显示字节序列?”-提示在问题中。“显示”的内容必须是一种设计选择,那么,您更愿意将字节字符串视为我们能够理解的数字还是ByTestRing:P