Как получить wstring на китайском языке из rapidjson::Document?

Я студент и разрабатываю ПК-клиент с помощью cpp. Я не знаю, как быть с тем, какой Rapidjson с кодировкой Unicode. Я всегда получаю грязный код. Я шутник о cpp, как я могу получить правильный результат? буду очень признателен!

Просто покажите пример:

class Test {
    // I have got the string of json
    // eg: { "name" : "小明" }
    public : void test(const std::string& data) {
        rapidjson::Document json;
        json.Parse<0>(data.c_str());

        // there are a method GetString() , return a string
        // The name value are another Chinese characters(I guess which because of its encoding).
        // I want to get a wstring which value is "小明"(Not a messy code). How can i do ? 
        std::string name = json["name"].GetString();
    }
};


// I had used this method
// But still got a messy code
str::UnicodeToAnsi();

person 毕晓峰    schedule 26.02.2016    source источник
comment
Покажите, что вы уже пробовали (код).   -  person Blacktempel    schedule 26.02.2016
comment
Опубликуйте несколько кодов, которые вы пробовали раньше.   -  person Shree Krishna    schedule 26.02.2016
comment
преобразовать std::string в std::wstring. Это не относится к библиотекам json.   -  person Barmak Shemirani    schedule 26.02.2016
comment
@BarmakShemirani Это не проблема преобразования строки в wstring. Это получение wstring из json.   -  person 毕晓峰    schedule 26.02.2016
comment
Может быть, вы могли бы проверить, что такое UTF-8 и как оно представлено, тогда, вероятно, вам вообще не нужно рассматривать wstring.   -  person Mine    schedule 26.02.2016
comment
@Mine Раньше я думал, что проблема будет в кодировке. Я ищу API Rapidjson, мы получаем возвращаемый тип кодировки json - Unicode, и я использую метод str:: UnicodeToAnsi(), получаю результат ошибки. Я сбит с толку. Пока я не попытаюсь использовать описанный ниже метод, я получаю правильную wstring. Но я думаю о том, может ли метод преобразовать строку из rapidjson в правильную строку кодировки?   -  person 毕晓峰    schedule 27.02.2016
comment
@毕晓峰 обратите внимание, что Unicode отличается от encoding. Unicode можно закодировать в UTF-8, UTF-16 или другие.   -  person Mine    schedule 29.02.2016


Ответы (1)


#include <codecvt>
#include <string>

// convert UTF-8 string to wstring
std::wstring utf8_to_wstring (const std::string& str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
    return myconv.from_bytes(str);
}

// convert wstring to UTF-8 string
std::string wstring_to_utf8 (const std::wstring& str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
    return myconv.to_bytes(str);
}

Преобразовать wstring в строку, закодированную в UTF-8 Спасибо!

person 毕晓峰    schedule 26.02.2016