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

Python 3中str()函数默认返回字节串?需全局设置编码吗?

问题解答

核心问题原因

你对str()函数处理字节串的逻辑理解有误:

  • subprocess.check_output()默认返回的是字节串(bytes类型),不是字符串。
  • 当你给str()传入bytes对象但不指定encoding参数时,它不会把字节串解码成字符串,而是生成这个bytes对象的字符串表示形式(也就是你看到的带b'...'的格式),这是Python的正常行为,和全局编码设置无关。

正确的处理方式

有三种更合理的方式来获取字符串格式的输出:

  1. 直接在subprocess中指定编码
    给check_output()加上encoding='utf-8'参数,让它直接返回字符串,省去后续解码步骤:

    #!/usr/bin/python3
    import subprocess
    
    # 直接指定encoding,返回字符串
    str2 = subprocess.check_output(['cat', '/proc/mounts'], encoding='utf-8')
    mounts = str2.splitlines()
    
    for mount in mounts:
        if mount.startswith('/dev/sd'):
            print(mount)
    
  2. 使用bytes对象的decode()方法
    对返回的字节串直接调用decode('utf-8')解码,比用str()更直观:

    test = mounts[x].decode('utf-8')
    
  3. 保留原写法但明确encoding参数
    如果你坚持用str(),就必须指定encoding参数,这本质上和decode()做的是一样的解码操作:

    test = str(mounts[x], encoding='utf-8')
    

关于全局编码

不需要设置全局编码,Python 3的默认文本编码已经是UTF-8,你的问题完全是对str()函数处理bytes对象的逻辑误解导致的,和全局编码无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:06:16