使用open和json的小注意点

花了好多时间,原来是编码问题。

(转)使用with open 的时候,以r模式读的时候可以添加参数encoding,最好设置为UTF-8 ,这样在读取和写入的时候都是以UTF-8方式编码和解码
中文不容易出现问题,如

with open(“filename”,“r”,encoding=“UTF-8”) as f:
f.read()
如果以rb的方式读的话,读取之后需要decode()解码,如果wb写的话,写入前需要encode编码

with open(“filename”,“rb”) as f:
f.read().decode(“utf-8”)
如果文本不是utf-8编码的时候,解决方案
如果文本的编码格式未知的情况下,可以使用notepad++打开文件,notepad++右下方有文件的编码格式,也可以使用notepad++工具栏的
encoding功能,将文本转换为utf-8文本.不过是用notepad++转换的时候遇到notepad++转换不了utf-8,notepad++并不会报错
但是你使用python使用utf-8方式解码的时候会出错,会提示在多少个字节出现了utf-8解码不了的字节.
这个时候你可以使用open以rb的方式去读文件,读到出事的指定字节处,打印解码附近的字节,然后根据解码出来的数据
去原文中找解码不了的字符,删除即可.

比如100108字节出解码不了,那么就从10000字节处读取100个字节出来解码看内容去文本搜索
with open(“filename”,“rb”) as f:
f.seek(10000,0)
print(f.tell())
res = f.read(100)
print(res.decode(“utf-8”))

不过需要注意的是,有时候你选定的字节长度不能解析(会提示在0字节处utf-8解析不了),这个时候你换换读取的长度,或者换换起始位置读取就可以了
最好选择4或者8的倍数的长度去读.读取的字节长度不要太长80个以内
在使用json的使用最好不要让json使用ascii编码,防止出现中文乱码
json.dumps({“name”:“nick”},ensure_ascii=False,indet=2)
这里要注意的是json和with open没有关系,open是设置文件存储的格式,json只是传输数据的通用格式.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值