Python 3:如何将字节串转为字符串(不解码且去除b前缀)
解决字节串转成无
b前缀的原始字符串问题 你想要的其实是获取字节串的表示字符串(就是打印时带b'...'的内容),去掉开头的b前缀后的结果,而非真正的解码(解码需要指定编码格式,还可能出现解码错误)。这里有个简单直接的方法:
- 使用
repr()函数获取字节串的官方语法表示,再去掉开头的b'(或b")和结尾的单/双引号。
具体示例代码
def bytes_to_raw_display_str(bytestr): repr_str = repr(bytestr) # 兼容单引号和双引号的表示情况 if repr_str.startswith(("b'", 'b"')): return repr_str[2:-1] return repr_str # 测试你的目标示例 my_bytestring = b'\xb5\xb5\xb5\xb5\r\n1' result = bytes_to_raw_display_str(my_bytestring) print(result) # 输出: \xb5\xb5\xb5\xb5\r\n1 # 再测试你提到的PDF字节串例子 pdf_bytes = b'%PDF-1.4\n%\x93\x8c\x8b\x9e' pdf_result = bytes_to_raw_display_str(pdf_bytes) print(pdf_result) # 输出: %PDF-1.4\n%\x93\x8c\x8b\x9e
为什么这个方法可行?
repr()函数会自动把字节串转换成符合Python语法的字符串表示:非ASCII字节、控制字符会被转成\xhh、\r、\n这类转义序列,可打印的ASCII字符则直接保留。这正好和你想要的“去掉b前缀后显示的字符串”完全匹配。
你之前遍历字节串得到整数列表的问题,是因为Python中遍历字节串时,每个元素都是字节对应的十进制整数(比如b'\xb5'遍历出来是181),直接拼接自然会得到数字字符串,这显然不是你要的结果。而上面的方法直接利用了Python内置的字节串表示逻辑,简单又可靠。
内容的提问来源于stack exchange,提问作者Yobmod
相关产品推荐
相关产品推荐

