首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python会自动解码ASCII和UTF-8字节字符串吗?

python会自动解码ASCII和UTF-8字节字符串吗?
EN

Stack Overflow用户
提问于 2019-08-24 15:28:02
回答 1查看 2.2K关注 0票数 1

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

代码语言:javascript
运行
复制
string = "I am a string"

# prints a sequence of bytes, like I would expect
string.encode("UTF-16")
b'\xff\xfeI\x00 \x00a\x00m\x00 \x00a\x00 \x00s\x00t\x00r\x00i\x00n\x00g\x00'


# Prints a sequence of human readable characters, which I don't understand
string.encode("UTF-8")
b'I am a string'

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-24 15:35:03

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

代码语言:javascript
运行
复制
>>> "café".encode("UTF-8")
b'caf\xc3\xa9'

或者其他的ASCII,在字符形式上看不会有太大帮助:

代码语言:javascript
运行
复制
>>> "hello\f\n\t\r\v\0\N{SOH}\N{DEL}".encode("UTF-8")
b'hello\x0c\n\t\r\x0b\x00\x01\x7f'

如果可能的话,repr of bytes会显示可打印字符而不是\xnn转义,因为如果您碰巧有包含ASCII的字节,这是很有帮助的。

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

代码语言:javascript
运行
复制
>>> b'I am a string'[0]
73

另外:来自文档

虽然字节文本和表示是基于ASCII文本的,但字节对象的行为实际上就像不可变的整数序列,序列中的每个值都受到限制,以致0 <= x< 256 (试图违反此限制的尝试将触发ValueError)。这样做是为了强调,虽然许多二进制格式包括基于ASCII的元素,并且可以使用一些面向文本的算法进行有效的操作,但对于任意二进制数据来说,情况通常并非如此。

-emphasis补充道。

最后,这是python为显示字节所做的设计选择。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57639294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档