Unicode下汉字URLEncode解决方法
2011-08-24 11:35
211 查看
//汉字EnCode
.h
int UniToUTF8(CString strUnicode,char *szUtf8);
CString UniToUrlEncode(const char* szEncode);
.cpp
int CWeatherPropertyDlg::UniToUTF8(CString strUnicode,char *szUtf8)
{
//MessageBox(strUnicode);
int ilen = WideCharToMultiByte(CP_UTF8, 0, (LPCTSTR)strUnicode, -1, NULL, 0, NULL, NULL);
char *szUtf8Temp=new char[ilen + 1];
memset(szUtf8Temp, 0, ilen +1);
WideCharToMultiByte (CP_UTF8, 0, (LPCTSTR)strUnicode, -1, szUtf8Temp, ilen, NULL,NULL);
//size_t a = strlen(szUtf8Temp);
sprintf(szUtf8, "%s", szUtf8Temp);//
delete[] szUtf8Temp;
return ilen;
}
CString CWeatherPropertyDlg::UniToUrlEncode(const char* szEncode)
{
CString strEncoded;
static const char szUnsafe[] = {"/<>%//^[]`+$,@:;/!#?=&" };
static const char szHexChr[] = {"0123456789ABCDEF"};
int nLength = strlen(szEncode);
for(int i = 0; i < nLength; i++)
{
TCHAR ch = szEncode[i];
if((NULL == strchr(szUnsafe, ch))
&& ((int)ch > 32)
&& ((int)ch < 123))
{
strEncoded += ch;
}
else
{
strEncoded += CString("%");
strEncoded += szHexChr[(int)((ch >> 4) & 0x0f)];
strEncoded += szHexChr[(int)(ch & 0x0f)];
}
}
return strEncoded;
}
测试:
CString strTmp1 = _T("广州");
GetDlgItemText(IDC_EDIT1,strTmp1);
char *szChar = new char[strTmp1.GetLength()+1];
UniToUTF8(strTmp1,szChar);
UniToUrlEncode(szChar);
delecte[] szChar;
注意事项:
szChar要分配内存空间,要不在后面UniToUTF8()中的sprintf()操作中就会报错,原因就是第一个参数没有分配内存空间。也可在UniToUTF8()中对第一个参数进行判断,如果长度为0,则分配内存空间。
char *szChar = new char[strTmp1.GetLength()+1];
.h
int UniToUTF8(CString strUnicode,char *szUtf8);
CString UniToUrlEncode(const char* szEncode);
.cpp
int CWeatherPropertyDlg::UniToUTF8(CString strUnicode,char *szUtf8)
{
//MessageBox(strUnicode);
int ilen = WideCharToMultiByte(CP_UTF8, 0, (LPCTSTR)strUnicode, -1, NULL, 0, NULL, NULL);
char *szUtf8Temp=new char[ilen + 1];
memset(szUtf8Temp, 0, ilen +1);
WideCharToMultiByte (CP_UTF8, 0, (LPCTSTR)strUnicode, -1, szUtf8Temp, ilen, NULL,NULL);
//size_t a = strlen(szUtf8Temp);
sprintf(szUtf8, "%s", szUtf8Temp);//
delete[] szUtf8Temp;
return ilen;
}
CString CWeatherPropertyDlg::UniToUrlEncode(const char* szEncode)
{
CString strEncoded;
static const char szUnsafe[] = {"/<>%//^[]`+$,@:;/!#?=&" };
static const char szHexChr[] = {"0123456789ABCDEF"};
int nLength = strlen(szEncode);
for(int i = 0; i < nLength; i++)
{
TCHAR ch = szEncode[i];
if((NULL == strchr(szUnsafe, ch))
&& ((int)ch > 32)
&& ((int)ch < 123))
{
strEncoded += ch;
}
else
{
strEncoded += CString("%");
strEncoded += szHexChr[(int)((ch >> 4) & 0x0f)];
strEncoded += szHexChr[(int)(ch & 0x0f)];
}
}
return strEncoded;
}
测试:
CString strTmp1 = _T("广州");
GetDlgItemText(IDC_EDIT1,strTmp1);
char *szChar = new char[strTmp1.GetLength()+1];
UniToUTF8(strTmp1,szChar);
UniToUrlEncode(szChar);
delecte[] szChar;
注意事项:
szChar要分配内存空间,要不在后面UniToUTF8()中的sprintf()操作中就会报错,原因就是第一个参数没有分配内存空间。也可在UniToUTF8()中对第一个参数进行判断,如果长度为0,则分配内存空间。
char *szChar = new char[strTmp1.GetLength()+1];
相关文章推荐
- 解决VS2008不能TRACE UNICODE汉字的方法
- PHP去除unicode续:json_encode之后,只有文字,数字不见了的解决方法
- ABAP--关于Unicode的常见错误和解决方法
- (转)MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结
- 在Powe Point 2007 里输入汉字 、字符、数字等,非常慢的解决方法
- 'Invalid parameter not satisfying: URLString'网络请求的时候get使用特殊字符和汉字崩溃的恶心bug解决方法
- PHP采用get获取url汉字出现乱码的解决方法
- 程序输出urf-8编码的xml文件中文(汉字)乱码问题解决方法
- 网页采用UTF-8编码,传递汉字参数时出现乱码解决方法
- IE6通过get发送奇数个汉字请求会乱码的解决方法
- Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
- ubuntu下QQ国际版无法输入汉字解决方法
- MYSQL中输入汉字时变成乱码的解决方法
- TinyXML不支持UNICODE的解决方法【改造TinyXML】
- Ubuntu下搜狗拼音输入法打不出汉字的解决方法
- treeview里的汉字为乱码的解决方法
- VS2010 使用RDLC报表 布置在XP系统中 汉字全成了乱码 的解决方法
- 英文操作系统下中文操作软件汉字显示为问号的问题解决方法
- 解决 UNICODE 控制台 程序,无法显示汉字的问题
- Ubuntu下搜狗拼音输入法打不出汉字的解决方法