【已解决】Python3读取写入json的中文乱码问题

学习资料:《Python从入门到实践》---10.4.6重构

遇到的问题如下:

问题1.中文写入json,但json文件中显示"\u6731\u5fb7\u57f9",不是中文。


 
 
  1. # 中文写入json,但文件中显示"\u6731\u5fb7\u57f9",不是中文。
  2. # encoding='utf-8',用于确保写入中文不乱码
  3. with open(filename, 'w',encoding= 'utf-8') as f_obj:
  4. json.dump(username,f_obj)

解决方法:加入ensure_ascii=False


 
 
  1. # encoding='utf-8',用于确保写入中文不乱码
  2. with open(filename, 'w',encoding= 'utf-8') as f_obj:
  3. # ensure_ascii=False,用于确保写入json的中文不发生乱码
  4. json.dump(username,f_obj,ensure_ascii= False)

问题2.当目标json文件内容为空时,出现

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
 
 

解决方法:新增一个异常


 
 
  1. # 当 username .json为空,这里如果不加入 json .decoder .JSONDecodeError: 异常
  2. # 会导致 json .decoder .JSONDecodeError: Expecting value: line 1 column 1 ( char 0)
  3. except json .decoder .JSONDecodeError:
  4. print("文件内容是空的。")

参考资料:

### 解决 PythonJSON 写入中文乱码问题 在处理 PythonJSON 数据写入文件时,如果遇到中文字符显示为 Unicode 转义序列而不是正常的汉字,通常是因为 `json.dump` 或 `json.dumps` 方法默认不会自动将这些转义符转换回可读的中文字符。 以下是解决问题的方法: #### 使用 `ensure_ascii=False` 当调用 `json.dump` 或 `json.dumps` 函数时,默认参数 `ensure_ascii=True` 会强制将非 ASCII 字符(如中文)转化为 `\uXXXX` 形式的 Unicode 编码[^1]。为了保留原始的中文字符而不将其转义,可以设置参数 `ensure_ascii=False`。 下面是一个完整的代码示例展示如何正确保存带有中文JSON 文件: ```python import json data = { "name": "张三", "age": 25, "city": "北京" } with open('output.json', 'w', encoding='utf-8') as file: json.dump(data, file, ensure_ascii=False, indent=4) ``` 上述代码中的关键点在于设置了 `ensure_ascii=False` 和指定了文件编码为 `'utf-8'`。这样能够确保中文字符被正常存储到 JSON 文件中,并保持其可读性[^2]。 另外需要注意的是,在读取数据源的时候也要保证使用正确的解码方式。如果不了解确切的数据来源编码形式,则应优先考虑通过 `unicode()` 来解析字符串而非随意指定 `.decode('utf-8')`,以免因误判而导致乱码或异常终止程序运行[^3]。 最后提醒一点,对于 huggingface 库相关操作过程中可能碰到特定错误提示比如 repo ID 验证失败等问题,请参照对应项目的官方文档或者社区反馈来进行调整修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值