open-source-parsers/jsoncpp

Parsing breaks because it is locale sensitive

Open

#439 创建于 2016年3月9日

在 GitHub 查看
 (7 评论) (0 反应) (0 负责人)C++ (7,542 star) (2,602 fork)batch import
bughelp wanted

描述

I'm seeing this with version 1.6.5 on Ubuntu 16.04 (xenial).

Below is a trivial test program . (It requires the German locale to be installed.)

With the line that sets the locale commented out (assuming your are in a locale that uses '.' as the decimal point), everything works fine. With the locale setting enabled, the call fails and the error message is

'3.14' is not a number.

There is a related discussion in bug #283, but the issue below is different, I believe.

#include <jsoncpp/json/reader.h>
#include <iostream>
#include <locale>

int main(int, char **)
{
    using namespace std;

    locale::global(locale("de_DE.utf8"));

    Json::Value root;
    Json::CharReaderBuilder rbuilder;
    rbuilder["collectComments"] = false;

    string json_string = "3.14";

    unique_ptr<Json::CharReader> reader(rbuilder.newCharReader());
    auto begin = json_string.c_str();
    auto end = json_string.c_str() + json_string.size();
    string errors;
    bool ok = reader->parse(begin, end, &root, &errors);
    if (!ok)
    {
        cerr << errors << endl;
    }
}

贡献者指南