如何将 Python 3 字节字符串变量转换为常规字符串? [复制]

Posted

技术标签:

【中文标题】如何将 Python 3 字节字符串变量转换为常规字符串? [复制]【英文标题】:How do I convert a Python 3 byte-string variable into a regular string? [duplicate] 【发布时间】:2015-09-12 12:21:28 【问题描述】:

我在一个 XML 电子邮件附件中阅读了

bytes_string=part.get_payload(decode=False)

正如我的变量名所暗示的那样,有效负载以字节字符串的形式出现。

我正在尝试使用推荐的 Python 3 方法将此字符串转换为我可以操作的可用字符串。

例子说明:

str(b'abc','utf-8')

如何将 b(字节)关键字参数应用于我的变量 bytes_string 并使用推荐的方法?

我试过的方法不行:

str(bbytes_string, 'utf-8')

【问题讨论】:

这能回答你的问题吗? Convert bytes to a string 【参考方案1】:

更新:

在开头和结尾没有任何b 和引号

如何将看到的bytes 转换为字符串,即使在奇怪的情况下也是如此。

由于您的代码可能有 无法识别 字符以 'utf-8' 编码, 最好只使用 str 而不使用任何附加参数:

some_bad_bytes = b'\x02-\xdfI#)'
text = str( some_bad_bytes )[2:-1]

print(text)
Output: \x02-\xdfI

如果您将'utf-8' 参数添加到这些特定字节,您应该会收到错误。

正如 PYTHON 3 标准所说,text 现在将在 utf-8 中,不用担心。

【讨论】:

结果是 "b'\\x02-\\xdfI#)'" 这可能不是他想要的 @GlenThompson 这只是可能发生的不需要的情况的一个例子。我故意使用这个特定的文本。如果您的意思是文本首先有一个b,那么我更新了答案 非常感谢我正在寻找一种方法来删除具有 ansi 字符的字符串的 b'' 而不会编码和丢失字符,我是 python 新手,不知道我可以使用索引从开始到开始减少数组:O @DiegoFernandoMurilloValenci,欢迎您。很高兴我能提供帮助。【参考方案2】:

如何从数组中过滤(跳过)非UTF8字符?

要解决 @uname01 的帖子和 OP 中的此评论,请忽略错误:

代码

>>> b'\x80abc'.decode("utf-8", errors="ignore")
'abc'

详情

来自docs,这里有更多使用相同errors参数的示例:

>>> b'\x80abc'.decode("utf-8", "replace")
'\ufffdabc'
>>> b'\x80abc'.decode("utf-8", "backslashreplace")
'\\x80abc'
>>> b'\x80abc'.decode("utf-8", "strict")  
Traceback (most recent call last):
    ...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0:
  invalid start byte

errors 参数指定当输入字符串不能根据编码规则转换时的响应。此参数的合法值为'strict'(引发UnicodeDecodeError 异常)、'replace'(使用U+FFFDREPLACEMENT CHARACTER)或'ignore'(只需将字符排除在Unicode 结果之外)。

【讨论】:

【参考方案3】:

你在最后一行几乎是正确的。你想要的

str(bytes_string, 'utf-8')

因为bytes_string的类型是bytes,与b'abc'的类型相同。

【讨论】:

str(bytes_string, 'utf-8', 'ignore') 传递第三个参数可以忽略错误。 这看起来应该是对pylang's answer 的评论(地址处理无效输入)。如果(您认为)bytes_string 没有任何问题,您为什么要忽略错误? 我的方法出现以下错误:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte for the following bytes string b'\xbf\x8cd\xba\x7f\xe0\xf0\xb8t\xfe.TaFJ\xad\x100\x07p\xa0\x1f90\xb7P\x8eP\x90\x06)0' @TobySpeight 好吧@alper,这不是一个有效的 UTF-8 字符串,所以你期待什么?【参考方案4】:

bytes 实例上调用 decode() 以获取其编码的文本。

str = bytes.decode()

【讨论】:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf6 in position 230: invalid start byte @JuhaUntinen 您的编码可能不是 utf-8。 如何从数组中过滤(跳过)非UTF8字符? 使用str = bytes.decode("utf-8) 使用不同的编码。将 utf-8 替换为你想要的编码。

以上是关于如何将 Python 3 字节字符串变量转换为常规字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何将从二进制文件中读取的字节转换为数字

javascript中如何将获得的整型数值转换为字节数组

Python将字符串读取为字节而不进行转换

如何将“字节”对象转换为 Pandas Dataframe、Python3.x 中的文字字符串?

如何在python中解压12个字节? php代码可用!试图将其转换为 python

如何将字节对象转换为 python 3 中的元组列表?