高分!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();
}
}
}

...全文
9896 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编码来静态化文件,那就最好了
老牛同学 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)
内容概要:本文系统研究了虚拟同步发电机(VSG)在并网过程中的惯量-阻尼协同自适应控制策略,结合Simulink仿真与Matlab代码实现,深入探讨其对电网频率稳定的支撑作用。研究内容涵盖VSG的基本建模、双机并联条件下的功率精确分配、微电网黑启动过程、预同步控制技术、虚拟阻抗的引入及其对系统稳定性的影响,并通过根轨迹分析、调节系数对比等方法验证所提控制策略的有效性与鲁棒性。该工作为高比例新能源接入背景下的电力系统提供了增强惯性响应和动态稳定性的解决方案,并构建了一个完整的仿真验证平台。; 适合人群:具备电力系统分析、自动控制理论基础,熟悉Matlab/Simulink仿真环境,从事新能源并网、微电网控制、电力电子变换器控制及电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握虚拟同步发电机的核心运行机理与控制建模方法;② 实现VSG在并网、孤岛切换、黑启动等典型工况下的协同控制仿真;③ 分析惯量与阻尼自适应调控对系统频率动态响应的优化效果;④ 为相关课题研究、高水平论文复现或实际工程项目提供可扩展的仿真模型与技术支持。; 阅读建议:建议结合文中提供的Matlab代码与Simulink模型,逐步搭建仿真系统,重点理解控制策略的设计逻辑与参数整定方法,并通过改变负载扰动、并网机、控制器增益等工况进行对比仿真,深入掌握系统稳定性分析的关键技术与优化路径。
内容概要:本文档是PCI-SIG发布的工程变更通知(ECN),针对PCI Express Base Specification 3.1版本中的数据链路层包(DLLP)编码进行两项维护性更新。主要变更包括定义一种新的NOP DLLP(无操作数据链路层包),以支持未来硬件发送端的实现优化,并将所有已分配的DLLP编码统一整理至规范中的单一表格(Table 3-1),提升文档一致性与可维护性。接收端被要求在不采取任何动作的情况下丢弃NOP DLLP,且该包可携带24位任意负载用于调试或日志记录。文档明确指出此次变更不涉及硬件或软件的功能性改动,对现有系统几乎无影响。; 适合人群:从事PCI Express协议开发、验证的硬件工程师、固件开发者及测试工程师,具备一定高速接口协议基础的技术人员;; 使用场景及目标:①帮助开发人员理解DLLP编码机制及未来硬件优化方向;②为测试规范提供依据,如建议更新Link Test Specification以明确未定义编码测试用例的具体编码选择;③指导协议一致性验证过程中对非法或特殊DLLP的处理行为;; 阅读建议:此资源属于标准修订技术文档,建议结合PCI Express Base Specification 3.1及相关测试规范对照阅读,重点关注Table 3-1的更新、新增的NOP DLLP格式图(Figure 3-10a)及其在链路层处理流程中的定位,便于准确理解和实施协议要求。

67,535

社区成员

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

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