JSON和BOM

json.loads不支持带有BOM的TXT,
比如用记事本写上{'test':123},然后另存为,选择utf-8编码方式。
PYTHON中输入以下代码

import json
with open(r'test.txt', 'r') as f:
    for line in f.readlines():
        lstProxies.append(json.loads(line))

运行就会提示错误:
ValueError: No JSON object could be decoded

详情:
UTF- 8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开 头的EF BB BF了

如果需要去掉BOM,那么可以

#去掉单行的BOM
with open('nicks-chinese.txt', 'r') as f:
    for line in f.readlines():
        if line[:3] == '\xef\xbb\xbf':
            line = line[3:]


#或者去掉整个content的BOM
with open('nicks-chinese.txt', 'r') as f:
    content=f.read()
    if content[:3] == '\xef\xbb\xbf':
        content = content[3:]

你可能感兴趣的:(JSON和BOM)