首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

请高手解决 bcb6上 unicode转ansi的有关问题

2012-12-30 
请高手解决 bcb6下 unicode转ansi的问题最近,开发了一个项目,要去采集一个网页。由于涉及到cookies的Post问

请高手解决 bcb6下 unicode转ansi的问题
最近,开发了一个项目,要去采集一个网页。由于涉及到cookies的Post问题,所以采用了IdHttp控件进行采集。

现在出现以下问题,采集回来的网页内容为:{"name":"\u52c7\u4e0d\u53ef\u6321",
这种代码,查了一下,好像说里面的中文是unicode编码。

我直接使用bcb6做以下测试,可以正常显示 成中文 勇不可挡。
    String p = "\u52c7\u4e0d\u53ef\u6321";
    returnTxt->Caption = p;

但是如果使用采集回来的内容,显示结果依然是\u52c7\u4e0d\u53ef\u6321
分析的代码如下:
String recookies;
String s = globefunction::HttpReq(url,"",&recookies); //采集
String reinfo = globefunction::FXsrc(s,""name":"",NULL,""",0);//分析函数
returnTxt->Caption = reinfo;

这时,returnTxt->Caption 显示的值,未进行任何改变。

请问,我应该如何进行转换呢?



[解决办法]
如果字符串的长度是8,那么字符串内容就是“勇不可挡”,如果长度达到24,显而易见,这是字符串的编码当成字符串了。你先前测试的字符串有误导嫌疑。请高手解决 bcb6上 unicode转ansi的有关问题

你需要这样一个函数:

String EncodeToString(String strEncode)
{
    wchar_t w;
    WideString strResult;
    strEncode = StringReplace(strEncode, "\\u", "\r\n0x", TReplaceFlags() << rfReplaceAll);
    TStringList *lst = new TStringList;
    lst->Text = strEncode;

    for (int i = 0; i < lst->Count; i++)
    {
        if (lst->Strings[i].Trim().Length() > 0)
        {
            w = lst->Strings[i].ToIntDef(0);
            strResult += WideString(w);
        }
    }

    delete lst;

    return String(strResult);
}

测试:
String str = "{"name":"\\u52c7\\u4e0d\\u53ef\\u6321"";
String reinfo = FXsrc(str, ""name":"", NULL, """, 0);

Caption = EncodeToString(reinfo);

热点排行