【江湖救急】wininet HttpSendRequest post 参数有中文?

jinyanhui_1987 2011-03-16 04:55:13
各位大侠,我现在开发一个请求某服务器上一网页,要传中文参数。
我的开发环境是VC6,字符预处理MBCS.
我直接char* postData="u=knodia&t=jin卡萨娇发看",作为参数提交给服务器。
其中u参数可以读取出来,t参数直接丢了。
请问大家这种问题怎么处理呀。
...全文
313 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinyanhui_1987 2011-03-17
  • 打赏
  • 举报
回复
非常感谢大家的回答,我已经解决了这个问题。现在结贴,并附上解决代码。
如果是mbcs 编码:ANSI--UNICODE--UTF-8
ANSI-->UNICODE
char* strpostdata = "u=JNKD就看见&t=jinyanhui大幅度";
int wcsLen = ::MultiByteToWideChar(CP_ACP, NULL, strpostdata, strlen(strpostdata), NULL, 0);
wchar_t* wszString = new wchar_t[wcsLen + 1];
::MultiByteToWideChar(CP_ACP, NULL, strpostdata, strlen(strpostdata), wszString, wcsLen);
wszString[wcsLen] = '\0';

UNICODE-->utf-8;
int u8Len = ::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
char* szU8 = new char[u8Len + 1];
::WideCharToMultiByte(CP_UTF8, NULL, wszString, wcslen(wszString), szU8, u8Len, NULL, NULL);
szU8[u8Len] = '\0';

如果编译环境是UNICODE,直接用UNICODE-->UTF-8转码就行。
再次感谢大家。
jinyanhui_1987 2011-03-16
  • 打赏
  • 举报
回复
网页自然是utf-8编码,如果在vc中队char* (Mbcs) 转成utf-8,post 过去不行吗,如果要转,请问怎么转呢
jwybobo2007 2011-03-16
  • 打赏
  • 举报
回复
看你的web站点代码使用哪种编码,是gb2312还是utf-8
如果是gb2312则,直接用16进制表示,如: "中文"-> %D6%D0%CE%C4
如果是utf-8则先把中文转换成utf-8在用16进制编码,如: "中文"-> %E4%B8%AD%E6%96%87

需要注意的是:
1.除了 -_. 之外的所有非字母数字字符都要转
2.空格用+号表示
RLib 2011-03-16
  • 打赏
  • 举报
回复
加个charset
jinyanhui_1987 2011-03-16
  • 打赏
  • 举报
回复
服务器是struts处理,反正中文是给丢了
Eleven 2011-03-16
  • 打赏
  • 举报
回复
你抓个包看看中文发送过去的时候会做怎样的转换?估计会URLEncode
jinyanhui_1987 2011-03-16
  • 打赏
  • 举报
回复
啥意思呀,怎么处理呀

18,356

社区成员

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

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