如何处理java中web系统里下载的文本文件里不支持GBK的问题?
有时在应用里,我们需要从数据库中取出数据,然后生成一个文本文件,最后用户在页面上点击下载。如果文本文件里有一些不常用的字,那么这时我们就需要使用GBK编码,否则,那些不常用的字就会显示为“?”。
请看下面的例子:
<%response.setHeader("Content-type","APPLICATION/OCTET-STREAM;charset=GBK");
String atta_name="下载文本文件.txt";
response.setHeader("Content-disposition","attachment;filename="+new String(atta_name.getBytes("GB2312"),"ISO-8859-1"));
%><%@ page import="javax.servlet.ServletOutputStream,java.lang.Exception"%><%
String str="弢弢弢弢弢弢弢弢弢弢弢弢弢弢弢弢弢弢弢弢弢弢";//这是什么字?我也不知道。
try{
ServletOutputStream sos = null;
sos = response.getOutputStream();
OutputStreamWriter ow = new OutputStreamWriter(sos,"GBK");
ow.write(str);
ow.flush();
ow.close();
}catch(Exception e){
e.printStackTrace();
out.println("error");
}
%>
为了方便,采用的是JSP,大家可以直接将以上代码存为JSP,运行测试。
以上代码的关键是OutputStreamWriter ow = new OutputStreamWriter(sos,"GBK");
如果没有这行,在输出的文件里就会显示为“?”。