首先你确定你的两台机器是否支持中文?
也就是说有没有utf-8的字符集
如果有的话用DataOutputStream和DataInputStream的writeUTF()和readUTF()方法

解决方案 »

  1.   

    DataOutputStream os = new DataOutputStream(socket1.getOutputStream());os.writeUTF(str);////      bw.flush();
          os.close();
      

  2.   

    谢谢,我明天去试试,另外怎么知道Linux的机器是否支持utf8呢?
      

  3.   

    可以把String直接变成Byte[],然后写到os里面,对面作相应的修改
      

  4.   

    还不行啊,可能还和环境有关,现在我的机器中java程序都不支持中文,
    当里面的字符串包含中文时,用 javac xxx.java都出错了,会不会与此有关?实际使用中我的中文是从数据库中取得的,直接保存到字符串,然后通过socket发送,这种情况是否一定要先解决上面那个支持中文的问题呢?
      

  5.   

    你的是linux?
    我的机器也是不支持utf-8编码,中文全部都是??
    要想系统支持中文好象要装字符集文件吧,这个我就不太清楚了
      

  6.   

    是Linux有没有这样的说法: 即我从数据库查出来的值,没有经过处理就发出去,只要客户端接收到后进行适当的处理还是可以显示中文的?
      

  7.   

    不行。你一从数据库读出中文来,就会被java进行转换成unicode,所以你必须保证中文在每一步都被正确转换。否则一旦转换错误就再也变不回来了。
    对于linux系统,一般的做法可以加一个环境变量
    LANG=zh_CN.GBK
    然后写一个简单的java程序打印出中文看看是否正确,或者通过加参数
    javac -encoding GBK来编译class,运行的时候加参数
    java -Dfile.encoding=GBK -Ddefault.client.encoding=GBK -Duser.language=zh -Duser.region=CN
    看看中文显示是否正常。同时要保证你的数据库字符集与java一致,即你的数据库字符编码也是GBK的。否则还需要在数据库查询getString的时候进行编码转换。这样读取出来的字符串你就可以通过getBytes把中文字节流发送出去。在接收端要用相同的编码方式收取。
      

  8.   

    谢谢楼上从数据库查询到的String一定要先转换为byte吗?是不是这样:byte[] xm=resultset.getString("xm").getBytes();转换为byte[]后是否要再转为String? 我看有些是这样用的:byte[] temp_t;
    String temp_p;
    String send=new String(xm)
    temp_p=resultset.getString("xm");
    temp_t=temp_p.getBytes("iso-8859-1");
    String temp=new String(temp_t);
      

  9.   

    往socket写最好是转化成字节流。
      

  10.   

    to  icewolf_li(冰狼)能否说详细点,谢谢!
      

  11.   

    如果你的数据库编码以及java代码的编译运行都是采用相同的编码(比如GBK),那么只要查询出来
    直接getBytes()就行了,比如
    byte[] bTmps = rs.getString("xm").getBytes();
    直接把bTmps往socket写就行。
    接收到接收到bytes之后直接new String(bTmps)即可。
    但如果这中间有任何环节的编码不一致,你就需要先转码再作下一步动作。
    比如说,你的数据库编码是iso-8859-1,java是gbk,
    那么就需要
    byte[] bTmps = (new String(rs.getString("xm").getBytes("ISO-8859-1"),"GBK")).getBytes();总之一个原则,从bytes到string和从string到bytes要保证用正确的编码来进行。