返回信息流客户端和服务器端都是用了UNicode,
那么在网络传输数据时候,我先将UNICODE,转换成非Unicdoe,然后收到数据后再转成UNICode。
如果数据都是字母和数字时候,用如下代码没有问题,但是如果有汉字的话,就会有问题了。
CString strInput = "Hello,北京";
int iLen = strInput.GetLength();
char* buff = new char[iLen+1];
ASSERT(buff);
memset(buff , 0,iLen+1);
int iRes = WideCharToMultiByte(CP_ACP , 0,strInput, iLen ,buff,iLen,NULL,NULL);
WideCharToMultiByte 第3个参数是字符个数,这里应该是8 ;
第6个参数iLen是转换字符后的字节数目,这里应该是8+2 =10(汉字占用2个字节)
如果strInput 字符串均为字母和数字的话,字节数目就是字符个数
难道在使用WideCharToMultiByte之前,我需要自己计算出多字节下所占用的字节数目么?也就是先读取字符串strInput ,如果是汉字,就记住要占2个字节?
请指点!
这是一条镜像帖。来源:北邮人论坛 / cpp / #28738同步于 2009/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
WideCharToMultiByte问题
youziboy
2009/9/19镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
【 在 youziboy (柚子) 的大作中提到: 】
: 标 题: WideCharToMultiByte问题
: 发信站: 北邮人论坛 (Sat Sep 19 20:21:46 2009), 站内
:
: 客户端和服务器端都是用了UNicode,
: 那么在网络传输数据时候,我先将UNICODE,转换成非Unicdoe,然后收到数据后再转成UNICode。
: 如果数据都是字母和数字时候,用如下代码没有问题,但是如果有汉字的话,就会有问题了。
: CString strInput = "Hello,北京";
: int iLen = strInput.GetLength();
: char* buff = new char[iLen+1];
: ASSERT(buff);
: memset(buff , 0,iLen+1);
: int iRes = WideCharToMultiByte(CP_ACP , 0,strInput, iLen ,buff,iLen,NULL,NULL);
:
: WideCharToMultiByte 第3个参数是字符个数,这里应该是8 ;
: 第6个参数iLen是转换字符后的字节数目,这里应该是8+2 =10(汉字占用2个字节)
: 如果strInput 字符串均为字母和数字的话,字节数目就是字符个数
:
: 难道在使用WideCharToMultiByte之前,我需要自己计算出多字节下所占用的字节数目么?也就是先读取字符串strInput ,如果是汉字,就记住要占2个字节?
我上面说过了,去看一下RFC 1014 - XDR
:
: 请指点!
: --
: 9公里马拉松羞愧的准备中
:
: ※ 修改:·youziboy 于 Sep 19 20:59:44 修改本文·[FROM: 211.71.15.*]
: ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 211.71.15.*]
唉 Cpp应该统一下了,STL一套,microsoft一套,有个string,又来个CString,标准是char,后来又来个wchar_t,大大降低了开发效率。指针也是,好不容易开发出一个大型程序,突然64位机又占据大半江山,以前在32位下开发的程序又可能出bug了。
【 在 youziboy (柚子) 的大作中提到: 】
: 客户端和服务器端都是用了UNicode,
: 那么在网络传输数据时候,我先将UNICODE,转换成非Unicdoe,然后收到数据后再转成UNICode。
: 如果数据都是字母和数字时候,用如下代码没有问题,但是如果有汉字的话,就会有问题了。
: ...................