为何Python JSON解码器遇带UTF-16 BOM的字符串会抛出异常?
Python JSON解码器对UTF-16 BOM的处理细节
最近研究Python的JSON解码器实现时,发现了一个值得注意的细节——如果给json.loads()传入以\ufeff(也就是UTF-16字节顺序标记,BOM)开头的字符串,会直接触发JSONDecodeError异常。
对应的核心判断代码如下:
if isinstance(s, str): if s.startswith('\ufeff'): raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)", s, 0)
另外,翻了下UTF-8相关的规范RFC3629,里面规定了两种应当禁用UTF-16 BOM的场景,但仔细对比后发现,这两种场景似乎都不适用于JSON的情况:
- 协议应禁止将U+FEFF用作[原文此处内容不完整]的内容
内容的提问来源于stack exchange,提问作者Andrey Stolbovsky
相关产品推荐
相关产品推荐

