如何读取文件中带b'前缀的bytes格式内容并转为UTF-8中文
解决方法
你的问题核心是:test.txt中存储的不是二进制字节数据,而是表示Python bytes字面量的字符串(比如b'\xe5\x95\x8a...'),所以直接用二进制模式读取后得到的是包含这些字符的字符串/字节,无法直接解码。
需要先把这个字符串转换成真实的bytes对象,再解码为中文,具体实现代码如下:
import ast input_file = "test.txt" with open(input_file, 'r', encoding='utf-8') as f: # 读取文件内容并清理格式:去掉开头的b、首尾的引号和换行 raw_content = f.read().strip() cleaned_content = raw_content.lstrip('b').strip('\'"') # 用ast.literal_eval安全解析为bytes对象(避免eval的安全风险) byte_data = ast.literal_eval(f"b'{cleaned_content}'") # 解码为UTF-8中文 print(byte_data.decode('utf-8'))
关键说明
- 为什么不用
rb模式?:文件里的b'\xe5\x95\x8a'是文本字符,不是真正的二进制字节,用rb读出来的是这些字符的二进制编码(比如UTF-8编码的b、'、\等字符),完全不是你需要的中文对应的字节。 - 为什么用
ast.literal_eval?:它能安全地将字符串形式的Python字面量(比如bytes、列表、字典)转换为真实对象,比直接用eval更安全,避免恶意代码执行风险。 - 如果文件有多行?:可以循环读取每一行,重复上述清理和解析步骤即可。
运行上述代码后,就能得到你期望的输出:
啊 有 什 么 事 啊 有 什 么 事 给 我 打 电 话 啊 嗯 嗯 好 好 好 好 再 见 哎 再 见 嗯 好
内容的提问来源于stack exchange,提问作者Phoenix Bai
相关产品推荐
相关产品推荐

