Как я могу справиться с этой кодировкой? - PullRequest
3 голосов
/ 12 апреля 2010

Я сейчас пытаюсь разобрать хром-закладки, но у меня возникла проблема. фрагмент закладки представлен следующим образом:

    {
        "date_added": "12915566290018721",
        "id": "16",
        "name": "hao123\uFF0D\uFF0D\u6211\u7684\u4E0A\u7F51\u4E3B\u9875",
        "type": "url",
        "url": "http://www.hao123.com/"
     }

строковая кодировка, соответствующая полю имени, сохраняется как "hao123 \ uFF0D \ uFF0D \ u6211 \ u7684 \ u4E0A \ u7F51 \ u4E3B \ u9875", но это должно быть "hao123-- 我 的 上网 主页" для предоставления пользователям , Как я могу преобразовать "hao123 \ uFF0D \ uFF0D \ u6211 \ u4E0A \ u7F51 \ u4E3B \ u9875" в "hao123-- 我 的 上网 主页"?

thanks!

Ответы [ 5 ]

2 голосов
/ 03 июня 2015

Вы можете попробовать этот код

   std::string name = root.get("name","").asString(); 

   USES_CONVERSION;

   std::wstring wstr_name(A2W_CP(name.c_str(), CP_UTF8));
1 голос
/ 12 апреля 2010

Спасибо, кодека, я решаю проблему.

 std::string name = root.get("name","").asString(); 
 cout<<name<<endl;

 int len=strlen(name.c_str())+1;
 WCHAR outName[MAX_PATH];
// MultiByteToWideChar(CP_UTF8, 0, name.c_str(), len, outName, len);


 char outch[MAX_PATH];
 WCHAR * wChar=new WCHAR[len];
 wChar[0]=0;
 MultiByteToWideChar(CP_UTF8, 0, name.c_str(), len, wChar, len);
 WideCharToMultiByte(CP_ACP, 0, wChar, len, outch , len, 0, 0);
 delete [] wChar;




  cout<<outch<<endl;

Спасибо, кодека & fbrereto еще раз.

1 голос
/ 12 апреля 2010

То, что вы смотрите, это кодовые точки UTF-16 в строке. Если у вас нет библиотеки JSON, которая обрабатывает Unicode, рассмотрите возможность итерации строки и поиска escape-последовательности, которая обозначает кодовую точку UTF-16 "\ u". Оттуда вы можете преобразовать строку в любую кодировку, необходимую для ее правильного вывода.

0 голосов
/ 15 июня 2016

Up это работа. вот мой код 100

        Json::Reader reader;
        Json::Value root;
        if (reader.parse(response, root))
        {
            if (root.isMember("data")&& root.isMember("msg"))
            {
                Json::Value data = root["data"];
                std::string str = root["msg"].asCString();
                std::string cstr = UnicodeToGB2312(str);
                AndroidSay("%s", cstr.c_str());
            }
        }

string UnicodeToGB2312(std::string uData)
{
    int len = strlen(uData.c_str()) + 1;
    char outch[MAX_PATH];
    WCHAR * wChar = new WCHAR[len];
    wChar[0] = 0;
    MultiByteToWideChar(CP_UTF8, 0, uData.c_str(), len, wChar, len);
    WideCharToMultiByte(CP_ACP, 0, wChar, len, outch, len, 0, 0);
    delete[] wChar;
    char* pchar = (char*)outch;
    return pchar;
}
0 голосов
/ 12 апреля 2010

Насколько я могу судить по просмотру исходного кода Jsoncpp , похоже, что он должен правильно декодировать строку, и вы получите строку UTF-8 обратно. Если это не то, что вы видите, пожалуйста, опубликуйте код, который вы на самом деле используете, и то, что вы получите вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...