post获取的字符串转码后问有个“问号”WideCharToMultiByte

圆道 2012-10-28 08:49:22
==========我使用
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
....
ConvertGBKToUtf8(strCvtParam);
// pFile -> AddRequestHeaders("Content-Type: text/xml; charset=utf-8");
pFile -> AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");
pFile -> AddRequestHeaders("Accept: */*");
pFile -> SendRequest(NULL, 0, (LPTSTR)(LPCTSTR)strCvtParam, strCvtParam.GetLength());

==========去请求一个php utf-8的页面,这个页面就显示echo("我爱你啊");

===========这样取的:
while((nReadCount = pFile->Read(buffer, 2048)) > 0)
{
//strContent += buffer;
strcpy(cResult,buffer);
//memset(buffer, 0, 2049);

}

==========然后,
//---------先将UFT-8转成UNICODE---------------
char *szU8 = cResult;
int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8 , strlen(szU8 ), NULL, 0);
//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间
wchar_t* wszString = new wchar_t[wcsLen + 1];
//转换
::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszString, wcsLen);
//最后加上'\0'
wszString[wcsLen] = '\0';
//int itt1 = wcslen(wszString);
//CStringW strWid(wszString);

//-----------再将UNICODE转成ANSI就OK了-----
int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, itt1, NULL, 0, NULL, NULL);
//同上,分配空间要给'\0'留个空间
char* szAnsi = new char[ansiLen +1 ];
memset(szAnsi,0,ansiLen+1);
//转换
//unicode版对应的strlen是wcslen
::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);
//最后加上'\0'
szAnsi[ansiLen] = '\0';

================

问题:宽字符wszString 是正确的,这个多字符szAnsi不管怎么调前面总是有个问号,这样 "?我爱你啊" 前面总有个问号!不知道如何解决!
...全文
338 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ok1234567 2012-10-29
  • 打赏
  • 举报
回复
去掉BOM前导字节
圆道 2012-10-29
  • 打赏
  • 举报
回复
汗,已经知道了,感谢你!
圆道 2012-10-28
  • 打赏
  • 举报
回复
木有人理哦,太简单了?

18,359

社区成员

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

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