none
winsock 传送数据乱码 RRS feed

  • 问题

  • 使用两台电脑,A电脑做服务器端使用Winsock.SendData发送数据,B电脑做客户端使用Winsock1.GetData接收数据。A电脑操作系统语言环境为日文。B电脑为中文。程序采用Excel VBA开发,设置断点查看A发送数据为正常汉字(例:日本文化日),B电脑接收时就变成乱码(例:擔杮揤峜抋惗擔)。请问怎样才能解决?使用vbFromUnicode及vbUnicode在发送和接收时做转换,但是这个方法不好用。

    • 已移动 Max Meng 2011年7月22日 3:25 (发件人:Microsoft office system)
    2011年7月21日 5:27

答案

  • 先把字符串转为byte数组,传输后再转回字符串,两端使用同样的编码方式,比如Encoding.Unicode

    2011年7月22日 14:45
  • 你所说的vbfromunicode和vbunicode我不太了解是什么,但建议你使用System.Encoding.Unicode.GetBytes(String)方法转为字节数组,

    然后在接收方使用System.Encoding.Unicode.GetString转回字符串。如果需要,你也可以使用其他如UTF8等编码方式,关键是要使用同一种编码格式。

     

    2011年8月1日 14:22

全部回复

  • 在同一台机器上用vbFromUnicode及vbUnicode,看得到的数据和另一台是否一样
    http://feiyun0112.cnblogs.com/
    2011年7月22日 9:37
    版主
  • 先把字符串转为byte数组,传输后再转回字符串,两端使用同样的编码方式,比如Encoding.Unicode

    2011年7月22日 14:45
  • 先把字符串转为byte数组,传输后再转回字符串,两端使用同样的编码方式,比如Encoding.Unicode

    按照您说的方法我试验了下,使用相同的编码方式得到的byte数组长度不一样。如果换成,日文用vbfromunicode发送,中文接收时用vbunicode转换, 两边取出的byte数组长度都是一样的,但用vbunicode转换后还是乱码,请问和操作系统语言环境不同的字符集不同有关系吗?
    2011年7月26日 9:33
  • 你所说的vbfromunicode和vbunicode我不太了解是什么,但建议你使用System.Encoding.Unicode.GetBytes(String)方法转为字节数组,

    然后在接收方使用System.Encoding.Unicode.GetString转回字符串。如果需要,你也可以使用其他如UTF8等编码方式,关键是要使用同一种编码格式。

     

    2011年8月1日 14:22