Json(javascript object notation)是基于javascript(standard ECMA-262 3rd Edition-December 1999)的一个子集,采用完全独立于语言的文本格式。这种格式的数据在系统间传递体积小,解析也很方便,各种语言都自带解析json格式数据的方法。
但是如果你在windows环境编写了一个json格式的文件,然后用Python或者golang读取这个文件。将读取到的字符串进行json解析,往往会报错can't decode byte in position 0: invalid continuation byte。windows下选择utf-8编码时,会使用带BOM的utf-8形式,会在文件的头部默认加上“\xef\xbb\xbf”。通过文件读取到的字符串就是'\xef\xbb\xbf{A:'ddd'; B:'kkk'}',这种肯定不符合json格式的定义了,只有去掉\xef\xbb\xbf后才是标准的json格式。
解决方案可以是以utf-8不带BOM格式保存文件。如果程序本身是Linux环境运行的,那么可以直接在Linux环境编辑json格式文件就不会有BOM问题了。在windows环境编辑过json格式文件,例如配置文件config.json,如果解析报错,首先应该考虑的就是BOM问题。