如何将 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+FFFD
、REPLACEMENT 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 字节字符串变量转换为常规字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将“字节”对象转换为 Pandas Dataframe、Python3.x 中的文字字符串?