什么是json中有效但yaml1.2中无效的

s4n0splo  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(87)

很多人认为yaml1.2是json的超集。但似乎有一些证据表明它不是。然而,我在寻找这些例子时遇到了麻烦。(我想在Python中使用json.loads()和yaml.safe_loads,我希望看到jsonloads运行良好,但yamlloafs抛出错误)。会有例子吗?
我知道在yaml1中1e2将被认为是str,而在json中是number。所以我也想在yaml1.2中找到异常。

kg7wmglp

kg7wmglp1#

在JSON中,如果你想转义一个不在基本多语言平面中的Unicode字符,你需要编码一个UTF-16代理对(see this question)。
YAML规范并不明确允许这样做,相反,它允许32位转义序列(以\U开始)。

{ "x": "\uD834\uDD1E" }

字符串
使用符合JSON的实现加载的方式与使用YAML实现加载的方式不同。YAML实现可能会从其中的代理块中生成一个包含两个Unicode字符的字符串-这是允许的,也是法律的,因为根据Unicode规范,这些是未分配的代码点。某些实现,特别是以Windows为中心的实现,可能会产生错误,因为Windows API内部使用UTF-16,因此无法表示代理块中的代码点。
有效的YAML计算为相同的字符串将是

{ "x": "\U0001d11e" }

相关问题