为了加块首页的显示速度,我从网上copy了一个将jsp转换为html的servlet程序。但是在使用的时候,index.jsp变成index.htm时有中文的地方就是乱码的,如何解决乱码问题??
已知:index.jsp第一行已经有<%@ page contentType="text/html; charset=GBK"%>
copy来的sevlet程序:
public class ToHtml extends HttpServlet
{ public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String url="";
String name="";
ServletContext sc = getServletContext();
String file_name=request.getParameter("file_name");//你要访问的jsp文件,如index.html
//则你访问这个servlet时加参数.如http://localhost/toHtml?file_name=index url = "/"+file_name+".jsp";//这是你要生成HTML的jsp文件,如
//http://localhost/index.html的执行结果. name="d:/test/"+file_name+".htm";//这是生成的html文件名,如index.htm."
RequestDispatcher rd = sc.getRequestDispatcher(url);
final ByteArrayOutputStream os = new ByteArrayOutputStream();
final ServletOutputStream stream = new ServletOutputStream()
{
public void write(byte[] data, int offset, int length)
{
os.write(data, offset, length);
} public void write(int b) throws IOException
{
os.write(b);
}
};
final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
HttpServletResponse rep = new HttpServletResponseWrapper(response)
{
public ServletOutputStream getOutputStream()
{
return stream;
}
public PrintWriter getWriter()
{
return pw;
}
};
rd.include(request, rep);
pw.flush();
//我怀疑乱码出现再这里
FileOutputStream fos = new FileOutputStream(name); //把jsp输出的内容写到xxx.htm
os.writeTo(fos);
fos.close();
response.setContentType("text/html;charset=GBK");
PrintWriter out=response.getWriter();
out.print("<p align=center><font size=3 color=red>首页已经成功生成!Andrew</font></p>");
}
}
已知:index.jsp第一行已经有<%@ page contentType="text/html; charset=GBK"%>
copy来的sevlet程序:
public class ToHtml extends HttpServlet
{ public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String url="";
String name="";
ServletContext sc = getServletContext();
String file_name=request.getParameter("file_name");//你要访问的jsp文件,如index.html
//则你访问这个servlet时加参数.如http://localhost/toHtml?file_name=index url = "/"+file_name+".jsp";//这是你要生成HTML的jsp文件,如
//http://localhost/index.html的执行结果. name="d:/test/"+file_name+".htm";//这是生成的html文件名,如index.htm."
RequestDispatcher rd = sc.getRequestDispatcher(url);
final ByteArrayOutputStream os = new ByteArrayOutputStream();
final ServletOutputStream stream = new ServletOutputStream()
{
public void write(byte[] data, int offset, int length)
{
os.write(data, offset, length);
} public void write(int b) throws IOException
{
os.write(b);
}
};
final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os));
HttpServletResponse rep = new HttpServletResponseWrapper(response)
{
public ServletOutputStream getOutputStream()
{
return stream;
}
public PrintWriter getWriter()
{
return pw;
}
};
rd.include(request, rep);
pw.flush();
//我怀疑乱码出现再这里
FileOutputStream fos = new FileOutputStream(name); //把jsp输出的内容写到xxx.htm
os.writeTo(fos);
fos.close();
response.setContentType("text/html;charset=GBK");
PrintWriter out=response.getWriter();
out.print("<p align=center><font size=3 color=red>首页已经成功生成!Andrew</font></p>");
}
}
解决方案 »
- 求大神帮助!!!
- smartupload的问题
- 如何在JPanel上添加带有滚动条的JList组件?
- 如何一次性下载文件夹下所有文件?
- 学习
- 发现一个jdbc for 2000 sp2的一个BUG啊。。。。。。。。。。。。。。。。。。。。
- 出现"Exception in thread "main" java.lang.NoClassDefFoundError: Student"错误,是什么原因?
- 在win2000下jdk1.3的调试问题(初学)
- 哪里有JAVA JDK这个软件下载?
- Java中不支持必包,这种情况大家如何处理
- hashCode()和equals()有什么关系么?
- Bt的Torrent文件解析问题
response.setContentType("text/html");
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
这个servlet程序是baidu出来的,很多人的博客都在贴这个但是我怀疑他们只是贴出来,没有实际用到,否则他们也会出来问的,当然,或许还是我水平的原因吧
servlet也是同样的。如果能保证通过浏览器在jsp上看到的不是乱码,将其转为html的时候也不会出现乱码,因为编码的字节是不会变化的。对于lz的问题,先确定jsp头上提供给浏览器解析的字符集是否同实际jsp文件中中文显示的字符集一致。(有些编辑器是会自动匹配字符集的,就算你的中文不是GBK,是如utf-8,你的jsp头的描述为GBK,同样在编辑器中是不会出现乱码的。调整编辑器的编辑字符集为GBK,看看中文)保证不乱码需要注意:
1、输入的字节编码是什么编码,输出的字节编码就是什么编码。
2、jsp,html头上的编码集描述,是告诉浏览器通过什么编码来解析你的文件,同你的实际编码是两回事。
3、如果输入改变了字节编码,在输出的时候一定要恢复。
加<% request.setCharacterEncoding("GBK");%>
试试吧 今天刚学的
嘿嘿 献丑了
FileReader
FileWriter 例子:
File fin =new File("fin.txt"); //创建输入文件对象 File fout=new File("fout.txt"); //创建文件输出对象 FileReader in = new FileReader(fin); //创建文件字符流 读 对象,传递文件对象 FileWriter out = new FileWriter(fout); //创建文件字符流 写 对象,传递文件对象 int c; while((c=in.read())!=-1) //读 { out.writer(); //写 } in.close(); out.close(); }} FileWriter out = new FileWriter(fout); FileWriter()中的对象可以是 文件对象,也可以是文件URL
print.print(os);
试试这个,
感谢各位的现眼献策,谢谢!