String str = new String(data);其中,data为从InputStream读出来的Byte[],InputStream是一个文本文件,为什么最后 str中凡是中文全是乱码,只有英文能正常显示出来?

解决方案 »

  1.   

    你的data是什么编码的?
    试试
    String str = new String(data,"gb2312");String str = new String(data,"utf-8");String str = new String(data,"utf-16");等等。
      

  2.   

    同意楼上,不过最好用"gbk",如果是gb系列的话。
      

  3.   

    什么编码的?我也很想知道,就是正常Windows记事本那种编码
      

  4.   

    你读的时候,是按字节读取的,输出也是按字节输出
    因为英文只占一个字节,所以没有问题
    中文占两个字节,所以会产生乱码
    你按照字符读取就没问题了
    如下package io;import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;public class TestSystemOut {

    public static void main(String[] args){
    try {
    FileReader f = new FileReader(new File("D:\\1.txt"));
    BufferedReader br = new BufferedReader(f);
    String line = null;
    while((line = br.readLine()) != null){
    System.out.println(line);
    }
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }

    }}
      

  5.   

    其实我是再弄 J2ME程序,用 class.GetResourceAsStream获得InputStream,然后变成文本。
      

  6.   


    什么编码的?我也很想知道,就是正常Windows记事本那种编码  
    /////////////////////////////////////////////////////////////////////
    String str = new String(data,"gb2312");
    那你就这样试试
      

  7.   

    我们的平台默认应该是Unicode编码啊.中文也可以显示啊.是不是LENGTH出了问题.记得张孝祥<JAVA就业培训教程>里有这方面的知识你可以找找看
      

  8.   

    我试验了,只有 “UTF-8“好使 ,其他全为乱码,不过如果用 String(data,"UTF-8") ,那么读取到某一非特定的页时就会出现:然后就不显示了
    java.lang.RuntimeException: IOException reading reader invalid first byte 10101101
    at com.sun.cldc.i18n.Helper.byteToCharArray(+228)
    at java.lang.String.<init>(+9)
    at java.lang.String.<init>(+9)
    at testbookpalm2.Main.loadText(+70)
    at testbookpalm2.Main.commandAction(+53)
    at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282)
    at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10)
    at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68)
    at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(+47)
    at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+250)请问谁知道这咋回事