D_w*_*der 0 c++ json utf-8 jsoncpp c++11
在 JSON 中序列化 utf-8 字符串的标准方法是什么?它应该带有 u 转义序列还是应该是十六进制代码。
\n\n我想用 JSON 格式的单位序列化一些传感器读数。
\n\n例如,我的温度读数单位为 \xc2\xb0C。是否应该序列化为
\n\n{\n "units": "\\u00b0"\n}\n\xc2\xb4\xc2\xb4\xc2\xb4\nor should it be something like \n\xc2\xb4\xc2\xb4\xc2\xb4\n{\n "units":"c2b0"\n}\nRun Code Online (Sandbox Code Playgroud)\n\n或者这两者都可以得到标准支持。
\n如果使用 JSON 来交换数据,则必须使用 UTF-8 编码(参见RFC8259)。不再允许使用 UTF-16 和 UTF-32 编码。所以没有必要转义度数字符。我强烈建议不要进行不必要的逃避。
\n正确并推荐
\n{\n "units": "\xc2\xb0C"\n}\nRun Code Online (Sandbox Code Playgroud)\n当然,您必须应用正确的 UTF-8 编码。
\n如果在封闭的生态系统中使用 JSON,您可以使用其他文本编码(尽管我建议不要使用它,除非您有充分的理由)。如果您需要转义非 UTF-8 编码中的度数字符,则正确的转义序列是\\u00b0。
可能但不推荐
\n{\n "units": "\\u00b0C"\n}\nRun Code Online (Sandbox Code Playgroud)\n您的第二种方法在任何情况下都是不正确的。
\n不正确
\n{\n "units":"c2b0"\n}\nRun Code Online (Sandbox Code Playgroud)\n使用“\\xc2\\xb0”之类的内容也是不正确的。这是C/C++源代码中使用的转义。调试器也使用它来显示字符串。在 JSON 中,它始终无效。
\n也不正确
\n{\n "units":"\\xc2\\xb0"\n}\nRun Code Online (Sandbox Code Playgroud)\n