c++ Jsoncpp将一些字符读取为转义的unicode

x7rlezfr  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(231)

问题:我试图从json文件中提取一行并将其放入txt文件中。问题是某些字符表示为转义的unicode,而不是标准的unicode表示。
尝试解决此问题:我不确定是什么导致了这个问题。我的猜测是,这与JSONcpp是unicode 8而不是unicode 16有关。我通过查找https://stackoverflow.com/questions/4804298/how-to-convert-wstring-into-string查找了将unicode 8字符串转换为16的方法。但那也没用。我还查找了它是否与文件流系统https://en.cppreference.com/w/cpp/io/basic_fstream有关,这也没有得到我想要的结果。](https://stackoverflow.com
示例代码

Json::Value root;
    Json::Reader reader; 
    Json::StyledStreamWriter writer;
    ifstream  file("fileName");
    //wifstream  file(L"fileName");
    //ifstream<wchar_t> file("FileName");
    std::fstream txtFile("txtFileName");
    reader.parse(file, root);
    Json::Value events = root["events"];

//contains "He said “stop!”."
tempDialogue = events[eventIndex]["pages"][pageIndex]["list"][listIndex]["parameters"][0];
writer.write(txtFile, tempDialogue);
file.close();
txtFile.close();

文本文件,而不是包含
“他说\u201cHey站住\u201d。”
预期结果
”他说“停!“.”

7y4bm7vi

7y4bm7vi1#

JSON规范允许非ascii字符以原生UTF-8编码或\uXXXX转义表示。JSONCPP在内部将所有内容转换为本机UTF-8编码,因此您看到的是StreamWriter默认配置的结果。
你可以自己构造一个StreamWriter,它使用StreamWriterBuilder只发出UTF-8格式:

StreamWriterBuilder builder;
builder["emitUTF8"] = true;
std::unique_ptr<Json::StreamWriter> writer(builder.newStreamWriter())
writer->write(tempDialogue, &txtFile);

相关问题