我该如何处理这种编码?

时间:2010-04-12 04:33:51

标签: json encoding google-chrome

我现在正在尝试解析Chrome书签,但我遇到了问题。书签摘录如下:

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

对应于name字段的字符串编码存储为“hao123 \ uFF0D \ uFF0D \ u6211 \ u684 \ u4E0A \ u7F51 \ u4E3B \ u9875”,但它应该是“hao123--我的上网主页”提供给用户。如何将“hao123 \ uFF0D \ uFF0D \ u6211 \ u684 \ u4E0A \ u7F51 \ u4E3B \ u9875”转换为“hao123--我的上网主页”?

thanks!

5 个答案:

答案 0 :(得分:2)

您可以尝试此代码

strace.exe

答案 1 :(得分:1)

您正在查看的是字符串中的UTF-16代码点。除非您有一个为您处理Unicode的JSON库,否则请考虑迭代字符串并查找表示UTF-16代码点“\ u”的转义序列。从那里你可以将字符串转换为正确输出所需的任何编码。

答案 2 :(得分:1)

谢谢codeka,我解决了这个问题。

 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;

感谢codeka&amp; fbrereto再次。

答案 3 :(得分:0)

据我所知,Jsoncpp source code看起来它应该正确解码字符串,你会得到一个UTF-8字符串。如果那不是您所看到的,请发布您实际使用的代码,以及您要取回的内容。

答案 4 :(得分:0)

向上是工作。这是我的代码。

#!/usr/bin/env perl

my $desc = do { local $/ = undef; <> };

$desc .= "\n===="; # set the end marker

while($desc =~ /^==== (?<filename>.*?)#.*?====$(?<content>.*?)(?=^====)/mgsp) {
  print "filename=", $+{filename}, "\n";
  print "content=", $+{content}, "\n";
}

        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());
            }
        }