You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

bytes对象传入str构造器长度异常:2字节为何变为11个字符

问题原因说明

你执行的代码如下:

a = bytes("Ä","utf8")
x = str(a)

print(len(x))

出现输出为11的核心原因是:直接调用str()转换bytes对象时如果不指定编码参数,不会执行字节解码操作,而是返回bytes对象的字面量表示字符串。

具体执行逻辑:

  1. 字符Ä用UTF-8编码得到的字节对象为b'\xc3\x84',确实仅占2个字节
  2. 调用str(a)时,Python不会把字节序列解码为对应文本,而是生成这个字节对象的可打印官方表示,也就是把b'\xc3\x84'这个字节字面量的全部可见字符直接转为普通字符串
  3. 我们逐个数这个字面量的字符,刚好是11个:
  • 第1位:字节标识b
  • 第2位:起始单引号'
  • 第3位:转义符反斜杠\
  • 第4位:十六进制标识x
  • 第5位:十六进制字符c
  • 第6位:十六进制字符3
  • 第7位:转义符反斜杠\
  • 第8位:十六进制标识x
  • 第9位:十六进制字符8
  • 第10位:十六进制字符4
  • 第11位:结束单引号'

如果需要正常解码得到原始的Ä字符串,应该使用以下两种正确写法:

# 写法1:直接调用字节对象的decode方法指定编码
x = a.decode('utf-8')
# 写法2:给str构造器传入encoding参数
x = str(a, encoding='utf-8')

两种写法得到的x都是长度为1的Ä字符串,符合预期。

内容的提问来源于stack exchange,提问作者chakmeshma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:24:02