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

CS61a学习疑问:读取文本元素前缀'b'的含义及解决方法

关于urlopen返回结果带'b'前缀的问题解答

嘿,这个问题我刚学Python网络请求的时候也踩过坑!让我给你掰扯清楚:

那个'b'到底是什么意思?

这个b前缀可不是什么奇怪的bug,它是Python用来标记字节(bytes)类型数据的标识。当你用urlopen请求网络上的文本资源时,服务器返回的原始响应是字节流形式——毕竟网络传输的都是二进制数据嘛。所以shakes.read()拿到的是一个bytes对象,你调用split()拆分后,每个元素自然也都是bytes类型,就会带上这个b前缀。

怎么把这个烦人的'b'去掉?

核心操作就是把字节数据**解码(decode)**成我们常用的字符串(str)类型。因为这个莎士比亚的文本是用UTF-8编码的,直接用decode('utf-8')就能搞定:

修改后的代码示例:

>>> shakes = urlopen('http://composingprograms.com/shakespeare.txt')
# 先把字节流解码成字符串,再拆分
>>> text = shakes.read().decode('utf-8').split()
>>> text[:25]
['A', "MIDSUMMER-NIGHT'S", 'DREAM', 'Now', ...]

额外提醒:

  • 为什么要指定utf-8?因为大多数现代网站和文本资源都用UTF-8编码,这是最通用的选择。如果遇到解码报错的情况,你可以试试其他编码,但这个莎士比亚文本用UTF-8肯定没问题。
  • 要是你之后想对这些文本做查找、替换或者正则匹配之类的操作,必须先转成str类型,不然很多字符串方法对bytes对象根本不生效哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:59:29