解决方案 »

  1.   

    通讯的时候, 先转成utf8的bytes, 再发送, 接受方先读取bytes, 然后再转成utf8编码的字符串... 
    只有可能是发送和接收的时候的编码问题, 多检查一下吧..
      

  2.   

    我参与开发的上一个手游, 服务器用的是java, 客户端用的是c++, 我负责的是服务器开发... 反正我和客户端发送和接收字符串的时候, bytes都是调用了utf8的格式的....
    还有一个要注意的是.. java 和 c 还有c++的高地位不一样.. 比如 一个int值, 存在4个byte数组里.. java的最高位是会放在数组的 0 的位置,, 依次... 但c和c++是反过来的.. 
    其他的我就想不到什么问题了.... 通讯这块的东西很少.. 所以要么是编码.. 要么是高低位的问题. 别的就还真想不到了.. 我开发的过程中是只遇到了这两个...
      

  3.   

    我参与开发的上一个手游, 服务器用的是java, 客户端用的是c++, 我负责的是服务器开发... 反正我和客户端发送和接收字符串的时候, bytes都是调用了utf8的格式的....
    还有一个要注意的是.. java 和 c 还有c++的高地位不一样.. 比如 一个int值, 存在4个byte数组里.. java的最高位是会放在数组的 0 的位置,, 依次... 但c和c++是反过来的.. 
    其他的我就想不到什么问题了.... 通讯这块的东西很少.. 所以要么是编码.. 要么是高低位的问题. 别的就还真想不到了.. 我开发的过程中是只遇到了这两个...我这边通讯java和C 都是转成网络字节序(也就是高位),按你的意思是在outputStream.write(str.getBytes("utf-8"))的时候转码?我试过str=new String(str.getBytes(),"utf-8");这种方式不行。
      

  4.   

    写的时候是write(str.getBytes("utf8"))没错.. 但是你读的时候.. str=new String(str.getBytes(),"utf-8"); 这个里面的str.getBytes()的str是哪来的诶.. 应该是从缓冲区读出 byte数组. 直接生成字符串啊 new String(bytes, "UTF-8")  这才是你要的字符串吧..
      

  5.   

    我的意思是我之前试过这种方式进行写入:
    1. str=new String(str.getBytes(),"utf-8");//先对要发送的字符串进行转码
    2. outputStream.write(str.getBytes()); //然后再进行写入,但这种方式不可行,还是乱码。
    感觉上面这种方式和write(str.getBytes("utf8"))这种方式差不多呀!!!
      

  6.   

    被粗呀,write(str.getBytes("utf8"))这种方式貌似也不可以,测试还是乱码!