代码改变世界

VC++使用CSocket发送HTTP Request时需要注意发送数据的编码格式

2013-10-29 21:04  DVwei  阅读(810)  评论(0编辑  收藏  举报

VS2010以及更高版本中新建的MFC项目字符集默认是Unicode,CString创建的字符串默认是Unicode。

使用CSocket时,若以CString组织需要发送的HTTP Head时,那么服务器不会接受这种数据,会强制断开连接。

HTTP服务器的默认读取方式是基于char type的单字节字符串编码(ANSI-1Byte(8bit)/char(英文字符)),而Unicode是以2Byte(16bit)/char存储的,所以不能以unicode编码来构造HTTP Head.

解决方法有两种,第一种:

以CStringA class构造HTTP Head;

根据MSDN上的解释:“A CStringA object contains string data that is based on the char type, and supports single-byte and multibyte ( MBCS) strings.

所以直接用CStringA构造HTTP Head是可以的。

 

第二种:

利用WideCharToMultiByte function(http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx

先将Unicode编码的字符串转化成单字节的ASCII,再调用发送给服务器。