读书人

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

发布时间: 2012-12-30 10:43:15 作者: rapoo

请高手解决 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);

读书人网 >C++ Builder

热点推荐