日期:2014-05-18  浏览次数:20816 次

.net 与 java 的byte互通
事情是这样的
----------------------
因为程序需要,要用.net去接一个java的服务端来通讯

通讯的原理,就是按一定的规则,把 string -> byte[] 传过去

----------------------

遇到问题如下:
(utf-8编码)

我把 "Hello" 搞成byte[] 传过去,对方能判别,英文没问题

我把 "关" 搞成byte[] 传过去,对方【不能识别】,,中文出问题了

我们双方对了一下 byte[] 里的 每个byte

发现

-----------------------------------
【NET】
"Hello" {104,101,108,108,111}
"关" {229,133,179}
-----------------------------------
【java】
"Hello" {104,101,108,108,111}
"关" {-27,-123,-77}
-----------------------------------


查了下资料,,
------------------
c#中字节byte的范围是0~255;
java中字节byte的范围是-128~127:
------------------

OH,,My god。。

如何是好,,
我这边.net 一定要按 java 那种byte[] 过去的,否则接不了,有招吗?大侠们



附代码(net)
------------------------
string str = "关";
byte[] BB = Encoding.GetEncoding("utf-8").GetBytes(str);
------------------------

------解决方案--------------------
我测试了一下,貌似啥毛病都没有啊
JDK7,VS2010(中文),Win7(x86)(中文)
下面是测试代码啊

Java code

    public static void main(String[] args) throws IOException  {
        // TODO Auto-generated method stub
        ServerSocket server=new ServerSocket(5678);
        
            Socket client=server.accept();
            byte[] b="关".getBytes("utf8");
            client.getOutputStream().write(b);
            
//            byte[] b="Hello".getBytes("utf8");
//            client.getOutputStream().write(b);
            
            client.close();
        
            
    }