如何将一个包含中文的URL转换成类似 %E5%B2%E7%D4%E5%62 的形式.

fat_how 2005-04-27 10:31:52
谢谢
...全文
330 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerry 2005-04-27
  • 打赏
  • 举报
回复
BOOL InternetCanonicalizeUrl(
IN LPCTSTR lpszUrl,
OUT LPTSTR lpszBuffer,
IN OUT LPDWORD lpdwBufferLength,
IN DWORD dwFlags
);

参见MSDN. 另,还可以自己实现:


inline BYTE toHex(const BYTE &x)
{
return x > 9 ? x + 55: x + 48;
}

URLEncode1
CString URLEncode1(CString sIn)
{
CString sOut;

int k;
const int nLen = sIn.GetLength() + 1;

register LPBYTE pOutTmp = NULL;
LPBYTE pOutBuf = NULL;
register LPBYTE pInTmp = NULL;
LPBYTE pInBuf =(LPBYTE)sIn.GetBuffer(nLen);
BYTE b = 0;

//count not alphanumeric characters
k = 0;

pInTmp = pInBuf;
while(*pInTmp)
{
if (!isalnum(*pInTmp) && !isalnum(*pInTmp))
k++;
pInTmp++;
}

//alloc out buffer
pOutBuf = (LPBYTE)sOut.GetBuffer(nLen + 2 * k); //new BYTE [nLen + 3 * k];

if(pOutBuf)
{
pInTmp = pInBuf;
pOutTmp = pOutBuf;

// do encoding
while (*pInTmp)
{
if(isalnum(*pInTmp))
*pOutTmp++ = *pInTmp;
else
if(isspace(*pInTmp))
*pOutTmp++ = '+';
else
{
*pOutTmp++ = '%';
*pOutTmp++ = toHex(*pInTmp>>4);
*pOutTmp++ = toHex(*pInTmp%16);
}
pInTmp++;
}

*pOutTmp = '\0';
//sOut=pOutBuf;
//delete [] pOutBuf;
sOut.ReleaseBuffer();
}
sIn.ReleaseBuffer();
return sOut;
}

URLEncode2
CString URLEncode2(CString sIn)
{
CString sOut;

const int nLen = sIn.GetLength() + 1;

register LPBYTE pOutTmp = NULL;
LPBYTE pOutBuf = NULL;
register LPBYTE pInTmp = NULL;
LPBYTE pInBuf =(LPBYTE)sIn.GetBuffer(nLen);
BYTE b = 0;

//alloc out buffer
pOutBuf = (LPBYTE)sOut.GetBuffer(nLen * 3 - 2);//new BYTE [nLen * 3];

if(pOutBuf)
{
pInTmp = pInBuf;
pOutTmp = pOutBuf;

// do encoding
while (*pInTmp)
{
if(isalnum(*pInTmp))
*pOutTmp++ = *pInTmp;
else
if(isspace(*pInTmp))
*pOutTmp++ = '+';
else
{
*pOutTmp++ = '%';
*pOutTmp++ = toHex(*pInTmp>>4);
*pOutTmp++ = toHex(*pInTmp%16);
}
pInTmp++;
}
*pOutTmp = '\0';
//sOut=pOutBuf;
//delete [] pOutBuf;
sOut.ReleaseBuffer();
}
sIn.ReleaseBuffer();
return sOut;
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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