怎样将网页中的%xx%xx的字符串转换为一般字符串?谢谢

Eagle_118 2004-09-06 03:16:08
我从网页的头信息中提取部分数据,可是如果该部分数据中有中文,则得到的结果是%EA%9D...的形式的文字,我需要将其转化回中文字符,请高手指点。
谢谢。
...全文
150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
woodwoodwood3 2004-09-09
  • 打赏
  • 举报
回复
给你个函数:

//转换Web字符串到标准字符串
//例如 %D0%EC 转换成"徐"
CString CDlgIEDlg::WebStr2Str(LPCSTR lpBuf)
{
int nLen;
if(!lpBuf) nLen=0;
else nLen=::lstrlen(lpBuf);

CString s; int i=0;
while(i<nLen)
{
if(lpBuf[i]=='%')
{
BYTE c1=lpBuf[i+1];
BYTE c2=lpBuf[i+2];
i+=2;
if(c1>='0' && c1<='9') c1=(c1-'0')*16;
else if(c1>='A' && c1<='Z') c1=(c1-'A'+10)*16;
else if(c1>='a' && c1<='a') c1=(c1-'a'+10)*16;
if(c2>='0' && c2<='9') c2=c2-'0';
else if(c2>='A' && c2<='Z') c2=c2-'A'+10;
else if(c2>='a' && c2<='z') c2=c2-'a'+10;

char szStr[2]; szStr[0]=c1+c2; szStr[1]=0;
s+=szStr;
}
else if(lpBuf[i]=='+') s+=" ";
else s+=CString(&lpBuf[i],1);
i++;
}
return s;
}
snaill 2004-09-08
  • 打赏
  • 举报
回复
%后面的是字符的16进制码,主要是因为你的页面的编码不对应的原因,你可以将他们直接转换为BYTE[]的形式,根据页面的编码做转换
roger_ding 2004-09-08
  • 打赏
  • 举报
回复
WideCharToMultiByte 用法参考MSDN
Eagle_118 2004-09-06
  • 打赏
  • 举报
回复
我也是这样转换的,关键还有字符集的问题,我发现该段字符串的内容应该事utf-8的编码,但是我在content_type中得到的charset=gbk,并且我怎样才能够将utf-8的字符转化为ansi的字符串。
谢谢。
lixiaosan 2004-09-06
  • 打赏
  • 举报
回复
关注一下
Jimmy_Xia 2004-09-06
  • 打赏
  • 举报
回复
CString szText;
存放得是一行网页数据
Jimmy_Xia 2004-09-06
  • 打赏
  • 举报
回复
%xx应该是16进制的数据,你把%后面得数字作为16进制数据来对待。
比如%20 = 0x20
等等,依此类推。
我没有做过,不知道对不对,你试试看吧。
还有字节顺序不知道是怎样得,这个需要测试一下。
参考代码如下:
char buffer[1024];
CString szText;
int nLen = szText.GetLength();
int nIndex = szText.Find('%');
int i = 0;
while(nIndex>=0)
{
buffer[i] = ConvertStrToHex(szText.Mid(nIndex+1,2));//将%后得数字字符转换成数字
nIndex ++;
i ++;
nIndex = szText.Find('%');
}
Eagle_118 2004-09-06
  • 打赏
  • 举报
回复
太简单了?
还是太难了?

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧