Nomango/configor

序列化时非法字符转义异常

Closed this issue · 1 comments

如下代码可以正常序列化:

#include "configor/json.hpp"
#include <string>
#include <iostream>

using namespace configor;

int main() try
{
    std::string str("\x07Hello world");

    json::value v{str};

    std::cout << json::dump(v) << std::endl; // OK, print "\u07Hello world"
}
catch(std::exception& e){
    std::cerr << "catch exception: " << e.what() << std::endl;
}

但如果 \x07 变成 \xff 就会抛出异常:

#include "configor/json.hpp"
#include <string>
#include <iostream>

using namespace configor;

int main() try
{
    std::string str("\xffHello world");

    json::value v{str};

    std::cout << json::dump(v) << std::endl; // throw exception
}
catch(std::exception& e){
    std::cerr << "catch exception: " << e.what() << std::endl; // catch exception: value serialization error: unexpected character '\u8792BAEF'
}

理论上 \x07\xff 都不是合法的 json 字符,\x07 在 C++ 中其实是 char(7),这个字符不在 json 的合法字符序列中,它应该和 \xff 一样抛出异常。

我在这里确认json的语法规则 https://www.json.org ,其中有效字符从 0x20 开始
image