先说说我的情况:我以前一直是用GBK编码来做WEB开发,这次我用了UTF-8,就出现了不少问题。下面的代码是我用来WEB开发时生成静态页面的,如果是GBK编码时,没有任何问题,生成的页面不会出现乱码的情况。但是现在我用的编码是UTF-8,就出现了乱码,我怎样转换都转换不过来。只能求教高手了!import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;public class PageStatic {   
     /**  
      * 将信息转化为静态html  
      * @param sFilePath 动态信息访问URL  
      * @param sSavePath  存储为静态文件的目录  
      * @param sHtmlFile 生成的静态文件名,可以按信息的唯一ID+.html命名  
      * @throws IOException   
      */  
     public static void updateStatic(String sFilePath,String sSavePath,String sHtmlFile) throws IOException { 
      PageStatic ru = new PageStatic();
      String filePath = ru.getClass().getResource("/com/PageStatic/PageStatic.class").getPath().toString();   //取得项目根目录
      filePath = filePath.substring(1, filePath.indexOf("WEB-INF")-1);
      
      int HttpResult;
      String SavePath = filePath + sSavePath;     //保存路径
         URL url=new URL(sFilePath);     
         URLConnection urlconn=url.openConnection();     //抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接,通过在 URL 上调用 openConnection 方法创建连接对象
         urlconn.connect();     //使用 connect 方法建立到远程对象的实际连接
         HttpURLConnection httpconn=(HttpURLConnection)urlconn;   //每个 HttpURLConnection 实例都可用于生成单个请求,但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络  
         HttpResult=httpconn.getResponseCode();     //getResponseCode可以从 HTTP 响应消息获取状态码
         if(HttpResult!=HttpURLConnection.HTTP_OK) {     
         } else {      
              InputStreamReader isr = new InputStreamReader(httpconn.getInputStream());
              BufferedReader in = new BufferedReader(isr);   
              String inputLine;   
              if(!SavePath.endsWith("/")) {
               SavePath+="/";
              }
              FileOutputStream fout = new FileOutputStream(SavePath+sHtmlFile);
              while ((inputLine = in.readLine()) != null)   
              {
               fout.write((inputLine + (char)13 + (char)10).getBytes());
              }   
              in.close();   
              fout.close();   
            }
     } 
}  

解决方案 »

  1.   

    InputStreamReader isr = new InputStreamReader(httpconn.getInputStream(),"utf-8"); 
                  BufferedReader in = new BufferedReader(isr);  你可能需要指定编码。
    因为如果不知定,使用操作系统默认编码,一般在windows上,默认gbk,所以你原来没问题,而现在不符合就有问题了。
      

  2.   

    我也用UTF-8生成HTML的时候出现了乱码 说不定照他说能解决 不过默认是GBK么? 不是ASCII?
      

  3.   

    按照一楼的办法是解决不了的,我已经试过了。默认的编码应该是Unicode吧
      

  4.   

    以前碰到类似的问题,中间需要转一道 iso8859-1 
      

  5.   

    LZ你先想办法把生成的HTML变成能看的(就是让你手动操作 是转换该HTML的保存类型啊 还是换浏览器查询代码的格式啊) 你看看究竟是什么步骤出了错
      

  6.   


    我现在生成的HTML代码是在本地的,直接可以看到源文件乱码
      

  7.   

    肯定是编码没转换好的问题,同样的代码,如果页面是GBK则没有问题,是UTF-8就会乱码!!请高手们帮忙看看上面帖出来的代码应该怎样修改!!谢谢~~~
      

  8.   

    。输出之前你把STRING在后台输出下看有乱码没有 如果没有的话就把String转换下编码Java也有默认编码?
      

  9.   


    后台也是有乱码啊,和前台是一样的默认应该是Unicode
      

  10.   

    生成HTML还是用的GBK编码的header吧,你打开生成HTML,右键点击选择UTF-8编码,看是不是正常了如果是这样,把HTML的header改一下就行了
      

  11.   

    编码方式应该和"sFilePath 动态信息访问URL"页面的一样,你可先访问该页,看下其它编码方式,然后再转换成一机关报方式.
      

  12.   


    HTML的header不想改啊,因为整个网站都是UTF-8编码的,我现在想要的是可以把我发的代码修改成可以支持UTF-8编码来静态化文件,那就最好了
      

  13.   


    页面是utf-8.能否在我给出的代码基础上来修改?
      

  14.   

    其实你不需要转换编码吧?我觉得你取到什么就写出什么就行了,因为内容不是你产生的而且你也不需要直接看它,你只是把它保存到一个文件里面,所以在你的这个程序看来,目标网页是”数据“,数据应该保持原样。注意,Reader / Writer 是处理字符的,而 InputStream / OutoutputStream 是处理字节的,它们的差别就是 Reader/Writer 处理时需要考虑到字符集而 InputStream/OutputStream 则不需要,在你的情况中,你应该一直使用 InputStream 读取并用 OutputStream 写,不要用 Reader/Writer.