hur.cn - 华软网

 热门搜索

关于vc2005字符集的问题

  作者:未知    来源:网络    更新时间:2011/8/24
我用VC2005做了一个网络通信的例子程序,程序的大致结构是这样的:建立连接后,在编辑框中输入需要发送的消息,通过编辑框的CString类型的控件变量得到输入的字符发送出去……

接收端收到的总是第一个字符,或者乱码……
例如:发送“gg”
收到的只有“g”,使用16进制查看时发现收到的是“67 00 67 00”(是不是67我记不太清楚,反正就是g对应的十六进制)。

我想是不是因为vc2005使用的是UNICODE字符集,使得CString得到的字符是两个字节表示一个字符“67 00”对应字符“g”,而接收端认为“67”对应的是字符“g”,遇到“00”认为是结束符,所以接收端显示了一个“g”后就没有字符了。

我的分析不一定对,请高手指教。
我的问题是:如果我分析是对的,请问我该怎样处理,处理原则是使用VC2005不变,VC2005使用UNICODE字符集不变。
我想要的是在VC2005下使用UNICODE字符集处理上述问题的常规,通用解决方法,并不是只要能实现接收端显示完整字符就OK了。

我也知道在VC2005下是可以设置字符集,这样设置后和VC6其实没有什么区别的,但是我们的要求是不能这样解决问题的,希望大家理解。

从VC6转到vc2005也有一段时间了,可是关于字符集的问题老实没有解决好,希望各位大侠给我些方法,指导我能顺利的从VC6过度到vc2005来。

---华软 网友回答---
是Unicode。
不过通信的时候,重要的是协议。你的协议规定使用unicode就行。
实际上你接收到了“67 00 67 00”(估计后面还有00 00),是全部收到了。只不过你显示的时候当成ansi了,第二个字节0被误认为是字符串结束符,显示错了而已。
---华软网友回复---
上主要代码
---华软网友回复---
顶一下
---华软网友回复---
试试:按宽字符显示的函数
---华软网友回复---
vs2005用的是unicode码,所以编程的时候要很注意,例如CString str(L"编程");L是转换成宽字符的宏
---华软网友回复---
其实发送和接收和字符集没有关系的,从你的描述看,你的接收端已经收到正确的信息了。
你对接收字符的处理出问题了,没有当作widechar处理。
---华软网友回复---
从你的叙述上看,应该是接收端没有处理好。估计接受方将它当作ANSI来处理的。不知道你是如何处理接受数据的,不好说。
---华软网友回复---
接收端是一个通用的程序,是ansi接收的,而且接收端我无法修改,只能通过修改发送端处理
---华软网友回复---
引用 8 楼 blwuer 的回复:
接收端是一个通用的程序,是ansi接收的,而且接收端我无法修改,只能通过修改发送端处理

那你就不用UNICODE发送就是了,不改字符集也行,用char数组处理就是了。
---华软网友回复---
用vector<char>,保险起见:发送前判断数据中间有没有\0,如有就去掉或者用其他符号代替
引用 8 楼 blwuer 的回复:
接收端是一个通用的程序,是ansi接收的,而且接收端我无法修改,只能通过修改发送端处理

---华软网友回复---
引用 9 楼 wltg2001 的回复:
引用 8 楼 blwuer 的回复:
接收端是一个通用的程序,是ansi接收的,而且接收端我无法修改,只能通过修改发送端处理

那你就不用UNICODE发送就是了,不改字符集也行,用char数组处理就是了。


我发送到的东西是从编辑框控件得到的,编辑框控件变量是定义的CString变量,请问这么转换成char型的字符串啊?
---华软网友回复---
unicode了

---华软网友回复---
WideCharToMultiByte      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。