如何使用Pandas读取编码为UCS-2 Little Endian的JSON文件
解决方案
你遇到的问题根因如下:
- 你之前使用的
utf_16_be是UTF-16大端编码,和你文件的UCS-2 Little Endian(即UTF-16小端)编码完全不匹配。UCS-2是UTF-16的子集,现代Python的utf_16_le编码完全兼容UCS-2 Little Endian格式的文件,不需要额外调整参数。 - 你在调用
open()打开文件时没有指定编码,Python默认会使用系统默认编码读取文件,此时再给read_json传encoding参数不会生效,因为文件流已经被错误编码解析过了。
正确读取方式
方案1:直接传入文件路径给pandas(推荐)
不需要手动打开文件,直接给read_json传入文件路径和对应编码即可:
data = pd.read_json(f"{filename}.json", encoding="utf_16_le")
如果你的文件带BOM头,直接填encoding="utf_16"即可,Python会自动通过BOM识别大小端。
方案2:手动打开文件指定编码
如果你需要自行控制文件流的打开逻辑,在open阶段指定编码即可:
with open(f"{filename}.json", encoding="utf_16_le") as json_file: data = pd.read_json(json_file)
验证方法
如果读取还是异常,可以先测试编码是否匹配,确认文件内容能正常解析:
with open(f"{filename}.json", encoding="utf_16_le") as f: # 输出第一行内容,确认是否为正常可读的JSON文本 print(f.readline())
只要能正常输出可读文本,再喂给read_json就可以正常解析。
内容的提问来源于stack exchange,提问作者Nikky Leed
相关产品推荐
相关产品推荐

