1.我在读取网页UTF的编码时会遇到乱码,GBK时不会?(InstreamReader读取的)
有什么方法可以在读取的时候可以把UTF8转到GBK或GB2312,这样就不会出现乱码,而且在保存文件的时候也可以同时再转为UTF,
如果直接加上在提取的字符串后面,如果读取GB2312时,好象会保存为UTF,我想有没有什么方法可以判别???2.提取网页某个元素时,如果遇到网页字符较长的字符串会因为SubString()截取问题为Long出错,想问一下大家有什么解决的好方法呀???

解决方案 »

  1.   

    1.因为java在中文windows下默认使用gbk码,所以你读gbk的stream就不会乱码,另外如果你的操作系统为英文版的话,即使gbk也会乱码! 
    解决方法:InputStreamReader读取时,指定编码.  InputStreamReader(InputStream in, String charsetName)  这个构造函数可以指定用什么编码来读取,你必须指定编码,否则会以系统默认编码来读取stream
      解决你这个问题,还有一个关系点:你必须事先知道网页是什么编码. 然后把编码信息传递给InputStreamReader. 至于如何知道html编码,一般可以通过html头信息获取. 2. 你用int已经足够大了,没必要用long作为参数, 你知道int有多大吗? 有2^31 这么大,肯定超过 G 级别的字节数,你的网页不可能有这么大! 
      

  2.   

    在web.xml里价格字符编码的过滤器
      <filter>
        <filter-name>Spring character encoding filter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
         <param-name>encoding</param-name>
         <param-value>GBK</param-value>
        </init-param>
      </filter>
      

  3.   


    这个是控制自己网站的编码吧,读取别人网站的话,应该是不会经过filter的. 
      

  4.   

    StringBuffer sb = new StringBuffer();
    String str = "";
    try{
    java.net.URL url = new URL("http://www.google.com" +
    "/");
    java.net.HttpURLConnection url_conn = (java.net.HttpURLConnection)url.openConnection();
    if (url_conn == null)
    return;
    url_conn.setConnectTimeout(3000);
    InputStream in= url_conn.getInputStream();
    BufferedReader br = new BufferedReader(new java.io.InputStreamReader(in));
    while((str=br.readLine())!=null){
    sb.append(str);
    }
    System.out.println(sb.toString());
    }catch (Exception e) {
    // TODO: handle exception
    }


    这样读取不知道是不是楼主需要的
      

  5.   

    最好在页面上统一用utf-8的格式编码。然后用new InputSource(new StringReader(str))的方式去获取。应该不会有问题的。