我读文件的时候没有使用什编码方式阿。我是用read(buf),buf是个byte[],是把这个buf转化成char[]再传输出去的,和这个有关系吗

解决方案 »

  1.   

    不访问用new String(byte[],编码);如iso8859-1,gbk试试我的java与c++通信就是这样转换的中文。
      

  2.   

    kypfos(社会主义好) 
    能不能把你的例子给我参考一下,我现在这个问题很急阿。  [email protected]
      

  3.   

    char buffer[MAX_BUFFER_SIZE];
    int len=socket->Receive(buffer,MAX_BUFFER_SIZE-1);
    if (len<1)
    {
    AfxMessageBox("接收信息出现异常!");
    return;
    }
      

  4.   

    java内部使用Unicode编码,应该利用其将读入的字符编码转换为输出时所用平台的编码。
    如:
    ...
    Reader r = 
      new BufferedInputStream(new InputStreamReader(new FileInputStream(inFile)));
    Writer w = 
      new BufferedOutputStream(new OutputStreamReader(new FileOutputStream(OutFile)));Char[] buffer = new byte[4096];int len;while((len = r.read(buffer)) != -1){  w.write(buffer,0,len);}
    ...
      

  5.   

    charset错误,java一般默认为ISO8859_1,但window系统一般是用GB2312,所以就会出现乱码问题,使用强制编码转换可以解决问题
      

  6.   

    如果是c写的socket流,我接收后要显示中文应该怎么转化?
      

  7.   

    galaxyseeker(星空) 你给的例子也没有怎么解决阿?
      

  8.   

    这不关SOCKET的事情,关键还是 byte[] 到 char[]或String 的转换过程。    JAVA在执行过程中,内部是统一以 UNICODE 来表示字符的;
        但 字符 除了 UNICODE 编码外,还有很多很多的编码(ISO-8859-1,GB2312……),
        当 JAVA 将 byte[] 转为 String 时,它要将你的字符编码转化为 UNICODE,但是它本身不知道你的编码是什么,所以你必须自己指定。如果你不指定的话,它会用SYSTEM的默认属性来处理——一般是你操作系统所用的字符编码,但这样并不表示它就是正确的,具体是什么还是自己来指定才行。
      

  9.   

    PrintStream  stream=new PrintStream(socket.getOutputStream());
    FileInputStream  fs=new FileInputStream("PhoneBook.txt");
    DataInputStream  ds=new DataInputStream(fs);String s=ds.readLine();
    stream.println(s);    // s是中文,则会出现??的乱码,应该怎样改??
      

  10.   

    我试过读文件时候是用的char[],接收的时候用的是byte[],这个时候我发现读出的长度,和接收的不一样长。是不是java中一个中文放入一个char,但用byte[]时是两位阿。
      

  11.   

    果然不出所料,一个中文在java中,char[]是一位,byte[]是两位。所以的问题就在这儿了
      

  12.   

    中文用Byte传,的确要两位的。char是short int占两位。