使用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只是传输数据的通用格式.

你可能感兴趣的:(使用open和json的小注意点)