Skip to content

如何在 Python 3 中将 bytes 转换为字符串

Posted on:2024年6月20日 at 21:57

在使用Python 3时,有时会遇到需要将字节对象(bytes)转换为字符串(str)的情况。例如,当我们使用subprocess模块捕获外部程序的标准输出时,输出通常是以字节对象的形式出现的。下面是一个具体的例子:

from subprocess import Popen, PIPE

stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
print(stdout)  # 输出: b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar  3 07:03 file2\n'

在上面的例子中,stdout是一个字节对象(bytes),我们需要将其转换为字符串(str)以便进行打印或进一步处理。

将bytes转换为str的基本方法

在Python 3中,可以使用bytes对象的decode方法来解码字节对象,从而得到一个字符串。这里有一个简单的例子:

byte_data = b"example"
string_data = byte_data.decode("utf-8")
print(string_data)  # 输出: example

在上面的例子中,我们假设字节对象是使用UTF-8编码的,这是一个常见的编码方式。然而,实际应用中应该使用数据的实际编码来进行解码。

处理不同编码

如果字节对象使用了其他编码,比如Windows的命令行输出可能使用windows-1252编码,那么我们需要使用相应的编码来解码:

byte_data = b"example"
string_data = byte_data.decode("windows-1252")
print(string_data)

使用sys模块获取系统默认编码

在某些情况下,使用系统默认编码是一个更好的选择。我们可以通过sys.stdout.encoding来获取系统默认编码:

import sys

byte_data = b"example"
default_encoding = sys.stdout.encoding
string_data = byte_data.decode(default_encoding)
print(string_data)