高分!FileOutputStream类write成UTF-8编码时出现乱码

love_lanchong 2009-08-06 11:09:10
先说说我的情况:

我以前一直是用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();
}
}
}

...全文
9719 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
胡海亮 2010-04-25
  • 打赏
  • 举报
回复
我也遇到这样的问题
love_lanchong 2009-08-08
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 humanity 的回复:]
其实你不需要转换编码吧?我觉得你取到什么就写出什么就行了,因为内容不是你产生的而且你也不需要直接看它,你只是把它保存到一个文件里面,所以在你的这个程序看来,目标网页是”数据“,数据应该保持原样。

注意,Reader / Writer 是处理字符的,而 InputStream / OutoutputStream 是处理字节的,它们的差别就是 Reader/Writer 处理时需要考虑到字符集而 InputStream/OutputStream 则不需要,在你的情况中,你应该一直使用 InputStream 读取并用 OutputStream 写,不要用 Reader/Writer.
[/Quote]

谢谢,你对读写这方面还是很有研究的
pmlxp 2009-08-07
  • 打赏
  • 举报
回复
帮顶
love_lanchong 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 obullxl 的回复:]
编码方式应该和"sFilePath 动态信息访问URL"页面的一样,你可先访问该页,看下其它编码方式,然后再转换成一机关报方式.
[/Quote]

页面是utf-8.能否在我给出的代码基础上来修改?
love_lanchong 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 paradise7th 的回复:]
生成HTML还是用的GBK编码的header吧,你打开生成HTML,右键点击选择UTF-8编码,看是不是正常了

如果是这样,把HTML的header改一下就行了
[/Quote]

HTML的header不想改啊,因为整个网站都是UTF-8编码的,我现在想要的是可以把我发的代码修改成可以支持UTF-8编码来静态化文件,那就最好了
obullxl 2009-08-07
  • 打赏
  • 举报
回复
编码方式应该和"sFilePath 动态信息访问URL"页面的一样,你可先访问该页,看下其它编码方式,然后再转换成一机关报方式.
paradise7th 2009-08-07
  • 打赏
  • 举报
回复
生成HTML还是用的GBK编码的header吧,你打开生成HTML,右键点击选择UTF-8编码,看是不是正常了

如果是这样,把HTML的header改一下就行了
love_lanchong 2009-08-07
  • 打赏
  • 举报
回复
哪位高人可以帮忙修改下代码吗?急用,谢谢~~
love_lanchong 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bearkin 的回复:]
。。。。输出之前你把STRING在后台输出下看有乱码没有 如果没有的话就把String转换下编码。。。Java也有默认编码?
[/Quote]

后台也是有乱码啊,和前台是一样的。。。默认应该是Unicode
BearKin 2009-08-07
  • 打赏
  • 举报
回复
。。。。输出之前你把STRING在后台输出下看有乱码没有 如果没有的话就把String转换下编码。。。Java也有默认编码?
love_lanchong 2009-08-07
  • 打赏
  • 举报
回复
肯定是编码没转换好的问题,同样的代码,如果页面是GBK则没有问题,是UTF-8就会乱码!!请高手们帮忙看看上面帖出来的代码应该怎样修改!!谢谢~~~
love_lanchong 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 bearkin 的回复:]
LZ你先想办法把生成的HTML变成能看的(就是让你手动操作 是转换该HTML的保存类型啊 还是换浏览器查询代码的格式啊) 你看看究竟是什么步骤出了错
[/Quote]

我现在生成的HTML代码是在本地的,直接可以看到源文件乱码
humanity 2009-08-07
  • 打赏
  • 举报
回复
其实你不需要转换编码吧?我觉得你取到什么就写出什么就行了,因为内容不是你产生的而且你也不需要直接看它,你只是把它保存到一个文件里面,所以在你的这个程序看来,目标网页是”数据“,数据应该保持原样。

注意,Reader / Writer 是处理字符的,而 InputStream / OutoutputStream 是处理字节的,它们的差别就是 Reader/Writer 处理时需要考虑到字符集而 InputStream/OutputStream 则不需要,在你的情况中,你应该一直使用 InputStream 读取并用 OutputStream 写,不要用 Reader/Writer.
BearKin 2009-08-07
  • 打赏
  • 举报
回复
LZ你先想办法把生成的HTML变成能看的(就是让你手动操作 是转换该HTML的保存类型啊 还是换浏览器查询代码的格式啊) 你看看究竟是什么步骤出了错
leisure55 2009-08-07
  • 打赏
  • 举报
回复
以前碰到类似的问题,中间需要转一道 iso8859-1
love_lanchong 2009-08-07
  • 打赏
  • 举报
回复
按照一楼的办法是解决不了的,我已经试过了。默认的编码应该是Unicode吧
BearKin 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhi_fa_zhe 的回复:]
InputStreamReader isr = new InputStreamReader(httpconn.getInputStream(),"utf-8");
              BufferedReader in = new BufferedReader(isr); 

你可能需要指定编码。
因为如果不知定,使用操作系统默认编码,一般在windows上,默认gbk,所以你原来没问题,而现在不符合就有问题了。

[/Quote]
我也用UTF-8生成HTML的时候出现了乱码 说不定照他说能解决 不过默认是GBK么? 不是ASCII?
owen_008 2009-08-07
  • 打赏
  • 举报
回复
我来帮你顶,呵呵~~
love_lanchong 2009-08-07
  • 打赏
  • 举报
回复
怎样设置呢?我试了很多方法都行不通,希望知道的哥们可以代码提示一下,谢谢~~
y312100893 2009-08-07
  • 打赏
  • 举报
回复
你在写入文件时,不是可以对文件进行编码设置啦,
加载更多回复(3)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧