今天我们主要来说说WEB中的乱码问题和文件下载和中文文件下载,我相信这个是很多程序员头疼的问题。
我们首先说说request对象和response对象
在Servlet中 是通过Service方法的参数传递每次请求的request对象和response对象
request -->HttpServletRequest 封装了所有的请求信息
response--->HttpServletResponse对象 封装了所有的响应操作
每一次请求都会创建 其以上两个对象。
//对象response
//当输出的是字符串,我们一般会采用 PrintWriter对象 调用相应的方法
//PrintWriterout字符流对象 默认的编码方式 那么在Java中 Unicode编码
//out response.getWriter();方法获取的, response对象ISO8859-1的编码方式
//在获取out对象时候 设置response的编码方式 是正确的中文字符编码
//response.setCharacterEncoding("UTF-8");
//response.setHeader("Content-Type","text/html;charset=UTF-8");
PrintWriterout = response.getWriter();
Stringdata = "中国"; //UTF-8,GB2312 中国就是字符串
//按照平台的默认字符编码将字符串的字符转换为字节,并完全以 write(int) 方法的方式写入这些字节
//out.println("<meta http-equiv="content-type" content="text/html;charset=UTF-8">");
out.println(data);
//总结:
/*
* 1、Serlvet程序输出给浏览器的内容,不是任何一种正确的中文字符集编码 ISO8859-1
* 2、浏览器浏览网页文档时所有采用的字符集编码与它接收到的中文字符本身的字符编码不一致。
* */
//声明下载资源
String path = this.getServletContext().getRealPath("/WEB-INF/classes/res/傻傻.jpg");
//构造文件
File file = new File(path);
InputStream is = new FileInputStream(file);
//修改编码
response.setHeader("content-disposition", "attachment;filename=" +URLEncoder.encode(file.getName(),"UTF-8"));
OutputStream os = response.getOutputStream();
byte b[] = new byte[1024];
int flag = 0;
while((flag = is.read(b))!=-1){
os.write(b,0,flag);
}
os.close();
is.close();