String stt ="LOGON hi";
String stt2 = "您";
System.out.println(stt+stt2);

解决方案 »

  1.   

    改一下这一句就可以了
    byte[] bytes = stt2.getBytes("gbk");
    原因可以看JAVA的getBytes的帮助:
    Encodes this String into a sequence of bytes using the named charset.....
      

  2.   

    还是不行...具体是这样的.我打开一个socket,使用它传送一个 中文到服务器,但服务器接收后输出却是乱码      InputStream is = socket.getInputStream();
          InputStreamReader isr = new InputStreamReader(is);
          BufferedReader br = new BufferedReader(isr);      String str = br.readLine();
      

  3.   

    这样解决,保证没有任何问题。
    你在client端用writeUTF把串写进去。在Server端用readUTF读出来。如果还有问题,再告诉我。另外,你的client端和Server端的操作系统都分别什么?
      

  4.   

    怎么找你啊??目前都是windows 2000做完后, server 会换成 linux ..
    client 可能两种都有,主要是windows我试下.
      

  5.   

    你的例子我刚才试过了,结果应该是:
    LOGON hi?
    汉字应该是无法显示的,英文无论如何都应该是正确的。
    分析一下你的代码:String stt ="LOGON hi";
        String stt2 = "您";//此处编码为Unicode    byte[] bytes = stt2.getBytes("ISO8859_1");//此处编码为ISO-8859-1
        stt2 = new String(bytes,"GBK");//此处编码为GBK如果是中文操作系统,javac在编译的过程为:
    读java文件(GBK编码)->编译(Unicode编码)->class文件(UTF编码);
    你的程序在运行时的编码:
    class文件(UTF编码)->运行(Unicode编码)->中间结果(ISO-8859-1)->输出(GBK).
    中间多了一层Unicode编码到ISO-8859-1的转换,问题就处在这一层。GBK和Unicode转换时是一一对应的,如果没有ISO-8859-1这一层,Unicode最终输出要转换到GBK,输出汉字,这是我们程序默认的行为,若有这一层,Unicode在转型为ISO-8859-1时就会为每个字节高位加两个0,ISO-8859-1再转为GBK时按照另一种规则,就会出现目标编码在GBK中找不到的情况。
    解决问题:可以采用javac -encoding ISO-8859-1 java源程序 来解决。
    欢迎讨论。