从程序中println出来中文没有问题,就是读取getSearchResult出来的中文乱码了。
代码:
    public static String getSearchResult(String urlStr) throws IOException {
        BufferedReader br = null;
        try {
            URL url = new URL(urlStr);
            br = new BufferedReader(new InputStreamReader(url.openStream()));
            String value = "", value_all = "";            while ((value = br.readLine()) != null) {
                value_all = value_all + value;
            }
            value_all = value_all.trim();
            return value_all;
        } catch (IOException e) {
            throw e;
        } finally {
            if (br != null)
                br.close();
        }
    }操作系统:
Red Hat Enterprise Linux AS release 4 (Nahant Update 1)locale 设置:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

解决方案 »

  1.   

    程序中println出来中文没有问题println什么地方调用没问题?
    getSearchResult是println乱码还是保存文件后乱码?
      

  2.   

    System.out.println("中国"); 没有问题
    System.out.println(getSearchResult("http://127.0.0.1/aa.jsp")); 乱码
      

  3.   

    http://127.0.0.1/aa.jsp编码问题
    这个网页可能不是UTF-8的编码吧,你要把它转换一下编码,转换成utf-8就可以了
      

  4.   

    转了,不行。不知道为什么
    System.out.println(new String(result.getBytes(), "utf-8"));
      

  5.   

    getBytes("iso-8859-1"), "utf-8")试试
      

  6.   

    System.out.println("1" + new String(result.getBytes(), "utf-8"));
            System.out.println("2" + new String(result.getBytes("iso-8859-1"), "utf-8"));
            System.out.println("3" + new String(result.getBytes("gb2312"), "utf-8"));
            System.out.println("4" + new String(result.getBytes("gb2312"), "iso-8859-1"));
            System.out.println("5" + new String(result.getBytes("gb2312")));
            System.out.println("6" + new String(result.getBytes(), "iso-8859-1"));
            System.out.println("7" + new String(result.getBytes(), "gb2312"));
            System.out.println("8" + new String(result.getBytes("utf-8"), "iso-8859-1"));
            System.out.println("9" + new String(result.getBytes("utf-8"), "gb2312"));
            System.out.println("10" + new String(result.getBytes("utf-8"), "gbk"));
            System.out.println("11" + new String(result.getBytes("iso-8859-1"), "gb2312"));
            System.out.println("12" + new String(result.getBytes("iso-8859-1")));没有一个能正常显示的!
      

  7.   

    问题是你不知道原来编码是什么不要用BufferedReader,直接用InputStream,或者在InputStreamReader构造的时候就设置编码看看,应该可以,设置成utf-8或者gb2312
      

  8.   

    打印出你的jvm的环境的设置看一看默认的字符集是什么?
      

  9.   

    LANG=zh_CN.UTF-8
    LC_CTYPE="zh_CN.UTF-8"
    LC_NUMERIC="zh_CN.UTF-8"
    LC_TIME="zh_CN.UTF-8"
    LC_COLLATE="zh_CN.UTF-8"
    LC_MONETARY="zh_CN.UTF-8"
    LC_MESSAGES="zh_CN.UTF-8"
    LC_PAPER="zh_CN.UTF-8"
    LC_NAME="zh_CN.UTF-8"
    LC_ADDRESS="zh_CN.UTF-8"
    LC_TELEPHONE="zh_CN.UTF-8"
    LC_MEASUREMENT="zh_CN.UTF-8"
    LC_IDENTIFICATION="zh_CN.UTF-8"
    LC_ALL=locale应该是这样的~~
    export LANG=zh_CN.UTF-8 ~~这样就不会乱码啦~
      

  10.   

    是UTF8格式,但是我还是转换出现乱码,应该如何转换才能不出现乱码呢?
      

  11.   

    我觉得是linux 的locale的问题哦~~~~
      

  12.   

    br = new BufferedReader(new InputStreamReader(url.openStream(),"gbk"));
    or
    br = new BufferedReader(new InputStreamReader(url.openStream(),"utf8"));两个都试试
      

  13.   

    为什么这样能正常,但是之前转就是不行呢?
    LANG=zh_CN.GB18030
    LC_CTYPE="zh_CN.GB18030"
    LC_NUMERIC="zh_CN.GB18030"
    LC_TIME="zh_CN.GB18030"
    LC_COLLATE="zh_CN.GB18030"
    LC_MONETARY="zh_CN.GB18030"
    LC_MESSAGES="zh_CN.GB18030"
    LC_PAPER="zh_CN.GB18030"
    LC_NAME="zh_CN.GB18030"
    LC_ADDRESS="zh_CN.GB18030"
    LC_TELEPHONE="zh_CN.GB18030"
    LC_MEASUREMENT="zh_CN.GB18030"
    LC_IDENTIFICATION="zh_CN.GB18030"
    LC_ALL=
      

  14.   

    br = new BufferedReader(new InputStreamReader(url.openStream(),"GBK"));这里不指定编码就会用系统默认,为了能在unix/linux上稳定运行,最好明确指定,因为运行时用户的环境是未知的
      

  15.   

    Stream这里还是原始数据
    一旦reader了就是有编码转换过
    java里面各种地方都是这样的,乱麻就找stream->reader的地方
      

  16.   

    fool_leave(请及时结贴) ( ) 信誉:92    Blog  2006-12-21 15:25:53  得分: 0  
     
     
       问题是你不知道原来编码是什么不要用BufferedReader,直接用InputStream,或者在InputStreamReader构造的时候就设置编码看看,应该可以,设置成utf-8或者gb2312
      
     
    ------------------------------------------------
    lz刚才没这样测试吗?