如何将Python中open()加载的文件数据正确转换为UTF-8编码?
解决方案
你遇到的核心问题是读取的字符串中\uXXXX是字面量存储的转义字符,而非Python原生的Unicode编码字符:你输出字节内容时看到的\\u就说明反斜杠本身被转义存储了,直接做UTF-8编解码无法识别这类字面量转义。
方法1:使用unicode_escape解码(最简便)
直接对字符串按单字节编码后用unicode_escape解析转义序列即可,示例修改后代码如下:
with open("test.tsv", encoding="utf-8") as import_lines: for line in import_lines: line_parsed = line.strip().split("\t") # 解析Unicode字面量转义 result = line_parsed[0].encode('latin-1').decode('unicode_escape') print(result)
这里用latin-1编码是因为它是单字节编码,每个字节和Unicode码点一一对应,不会丢失原始字符信息,保证转义序列可以被正确解析。
方法2:使用ast.literal_eval解析(更安全,适配复杂场景)
如果字符串中同时存在其他类型的转义符,用ast模块的安全字面量解析方法兼容性更好:
import ast with open("test.tsv", encoding="utf-8") as import_lines: for line in import_lines: line_parsed = line.strip().split("\t") # 给字符串包裹双引号后作为字面量解析 result = ast.literal_eval(f'"{line_parsed[0]}"') print(result)
这个方法不会有eval()的安全风险,适合来源不可控的文件内容处理。
内容的提问来源于stack exchange,提问作者Bob van Luijt
相关产品推荐
相关产品推荐

