在JSON字符串中,32个控制字符U+0000至U+001F绝对不允许以原始形式存在。
来自(链接:https://www.ecma-international.org/publications/standards/Ecma-404.htm 文本:ECMA-404)
bq. 所有字符都可以放在引号内,除了必须转义的字符:引号(U+0022),反斜杠(U+005C),以及控制字符U+0000至U+001F。
来自(链接:https://tools.ietf.org/html/rfc7159#section-7 文本:RFC 7159)
bq. 字符串以引号开始和结束。所有Unicode字符都可以放在引号内,除了必须转义的字符:引号,反斜杠,以及控制字符(U+0000至U+001F)。
当
`
}(默认值),所有超出32-127范围的字符都用{{\uCAFE}}语法进行转义(或者对于特殊的空白情况,使用命名转义)。
然而,当向{{write}}或{{write-str}}函数提供
`
}时,一些控制字符以原始形式写入,从而导致无效的JSON。这是不正确的行为;无论用户提供什么选项,库都不应生成违反规范的JSON。
此补丁在提供
`
}时,仍会转义控制字符。
对控制字符范围的命名转义有一些特殊处理以排除它们 — {{write-string}}函数始终转义那些具有特殊转义名称的字符(8,9,10,12,13),因此需要特殊处理。
我没有对解析功能添加任何控制字符验证,遵循Postel定律
bq. [TCP]实现应遵循一个一般原则的鲁棒性:在自身的行为上要保守,在接收他人提供的内容上要宽容。