You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:51:47