使用Poco::Json解析json内容,其中有中文字符,抛异常JSON Exception: Bad character.

发布于 2022-08-29 20:01:18 字数 999 浏览 17 评论 0

std::string jsonStr; // 有中文字符

Poco::Json::Parser parser;
 try {
   parser.parse(jsonStr);
   ...
 }
 catch (Poco::Exception& exc)
 {
  std::cerr << exc.displayText() << std::endl;
 }

请问该如何处理中文字符?谢谢!~

//----问题补充--------------
我发现我程序里的std::string都是mutibyte编码的,而Poco处理Json好像需要UTF8编码,所以我写了个转换的函数,先把mutibyte编码的std::string转成std::wstring(这个是不是算UTF16的?),然后再把wstring转成UTF8编码的std::string.
感觉我的处理有些繁琐……

std::string StringHelper::mutiByteToUTF8(std::string mutibyteStr){
    int len = ::MultiByteToWideChar(CP_ACP, 0, mutibyteStr.c_str(), -1, NULL, 0);  
    std::wstring mbwstr;
    if (len != 0){
        std::vector<wchar_t> unicode(len);  
        ::MultiByteToWideChar(CP_ACP, 0, mutibyteStr.c_str(), -1, &unicode[0], len);  
        mbwstr = &unicode[0];
    }
    std::wstring utf16str = mbwstr;
    std::string utf8str;
    Poco::UnicodeConverter::toUTF8(utf16str,utf8str);
    return utf8str;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷离° 2022-09-05 20:01:18

JSON字符串本身必须是7bit ASCII编码,如果有中文必须用"\ua1b2"这样的方式编码。一个非标准的扩展可以在其中直接放UTF-8编码的字符,但很多地方不支持。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文