str = new String(str.getBytes("Unicode"),"GB2312");

解决方案 »

  1.   

    试试以下方法,没有环境试。1.gb2312 -> UCS2
       String src = "中文";
       String result = new String(s.getBytes("GBK"), "UTF-16BE"); //now result is a UCS2 String
       byte[] ucs2Bytes = result.getBytes("UTF-16BE");2.UCS2 -> gb2312
       byte[] ucs2Bytes = new byte[]{0x4e, 0x2d, 0x65, 0x87}; //UCS2 bytes
       String src = new String(ucs2Bytes, "UTF-16BE");
       String result = new String(s.getBytes(""UTF-16BE""), "GBK"); //now result is a GBK String
      

  2.   

    zengchangliu(程序人生) 的写法是对的
      

  3.   

    我的程序清单如下,功能很简单,流程是这样的
    1.首先与socket服务器建立连接
    2.服务器立即返回数据包,是一个测试包,客户端可以丢弃不予理会
    3.客户端发送login包,它是一个XML格式的数据包
    4.服务器对收到的XML数据进行解析和用户验证,通过验证后就返回一条login_ret消息数据包由两个部分组成:
    项目         字节数    类型             说明
    Message Size 4         Unsigned Integer 消息总长度(含此4个字节及消息体)
    Message Body 可变      String           消息体
     
    消息体为XML格式的字符串,此字符串采用UNICODE编码现在程序有点问题,在清单中你能看到问题的出处
    我实在没办法解决了,公司的同事都束手无策,希望有高手能帮帮我们import java.net.*;
    import java.io.*;
    import java.lang.*;
    import java.text.*;
    import java.util.*;class test {
      public static void main(String args[]) throws Exception {
        Socket socket = new Socket("202.106.155.60", 7000);
        //202.106.155.60这个IP是测试用的IP,我已经把它连上互联网    DataInputStream in = new DataInputStream(socket.getInputStream());
        DataOutputStream out = new DataOutputStream(socket.getOutputStream());
        int packetLen = in.readInt();
        byte buff[] = new byte[packetLen-4];
        int realLen = 0;
        int left = packetLen-4;    int i = in.read(buff, realLen, left);
        if (i != -1) {
        }    //以上得到的buff不需要,丢弃
        //String textstr = new String(buff, "gb2312");
        //System.out.println(textstr);
        //发送login包
        String login = "<root><package_type>login</package_type><connect_id>5000</connect_id><connect_pwd>5000</connect_pwd><connect_type>1</connect_type></root>";    byte[] buf = login.getBytes("UTF-16BE");
        out.writeInt(buf.length+4);
        out.write(buf, 0, buf.length);    int packetLen1 =  in.readInt();
        //程序在这一行readInt时失败
        /*
          java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158) at java.net.Socket.connect(Socket.java:426) at java.net.Socket.connect(Socket.java:376) at java.net.Socket.<init>(Socket.java:291) at java.net.Socket.<init>(Socket.java:119) at test.main(test.java:11)       Exception in thread "main" 
        */    byte buff1[] = new byte[packetLen1-4];
        int realLen1 = 0;
        int left1 = packetLen1-4;    i = in.read(buff1, realLen1, left1);
        if (i != -1) {
        }
      }
    }
      

  4.   

    将写数据和读数据的部分加入
    try
    {...}
    catch(...)
    {...
      

  5.   

    to  jscsqb:
    你现在在网上就可以直接帮忙调试一下这个程序啊,你说的办法我早就试过了,每次到第二个readInt那一行就抛出异常,但是在第一次readInt是正常的