1.response对象:
向页面输出中文(乱码问题)
字节:ServletOutputStream getOutputStream() 字节输出流
* 字节的输出中文的乱码
* * 输出哈罗我的是否乱码呢?
* * 不一定乱码。
* * 解决办法
* * 设置浏览器打开文件时所采用的编码
* response.setHeader("Content-Type", "text/html;charset=UTF-8");
* * 获取字符串byte数组时编码和打开文件时编码一致。
* "哈罗我的".getBytes("UTF-8")
PrintWriter getWriter() 字符输出流
* 字符输出中文是否乱码呢?
* * 肯定乱码
* response缓冲区的编码,默认值ISO-8859-1
* * 设置response缓冲编码
* response.setCharacterEncoding("UTF-8");
* * 设置浏览器打开文件所采用的编码
* response.setHeader("Content-Type", "text/html;charset=UTF-8");
* * 简写方式
* response.setContentType("text/html;charset=UTF-8");
* 总结:response对象输出中文,产生乱码。
* 字节
* 解决方案
* 设置浏览器打开文件时采用的编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 获取字节输出流
OutputStream os = response.getOutputStream();
// 输出中文* 获取字符串的byte数组采用的编码
os.write("哈罗我的".getBytes("UTF-8"));
* 字符
* 解决方法
* 设置浏览器打开文件时采用的编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
* 设置response缓冲区的编码
response.setCharacterEncoding("UTF-8");
* 简写的方式(等于上面的两句)
* response.setContentType("text/html;charset=UTF-8");
2.request对象
乱码问题解决:
* POST请求乱码 :request.setCharacterEncoding("utf-8");
* GET请求乱码
解决方案一:修改tomcat/conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
* 必须有修改tomcat服务器配置文件权限
解决方案二:逆向编解码
username = URLEncoder.encode(username, "ISO8859-1");
username = URLDecoder.decode(username, "utf-8");
解决方案三:简写的方式(推荐使用)
username = new String(username.getBytes("ISO-8859-1"),"utf-8");
* request获取中文数据乱码(总结:)
* post提交
* 设置request缓冲区的编码
request.setCharacterEncoding("utf-8");
* get提交
* String构造方法
username = new String(username.getBytes("ISO-8859-1"),"utf-8");
3.文件上传的乱码问题
关于文件上传时的乱码问题:
1.上传文件名称乱码
ServletFileUpload.setHeaderEncoding("utf-8");
2.非上传组件内容乱码
FileItem.getString("utf-8");
3.上传文件信息是否会乱码,需要解决吗?
不需要解决,因为我们在上传时,使用的字节流来进行复制。
4.文件下载时的乱码问题
1.关于下载时中文名称资源查找不到
原因:<a href=’${pageContext.request.contextPath}/download?filename=天空.mp3′>天空.mp3</a>
这是get请求。
在服务器端:
String filename = request.getParameter("filename");
解决: new String(filename.getBytes("iso8859-1"),"utf-8");
2.下载文件显示时的中文乱码问题
response.setHeader("content-disposition", "attachment;filename="+filename);
IE:要求filename必须是utf-8码
firefox:要求filename必须是base64编码.
问题:怎样判断浏览器?
String agent=request.getHeader("user-agent");
if (agent.contains("MSIE")) {
// IE浏览器
filename = URLEncoder.encode(filename, "utf-8");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = "=?utf-8?B?"
+ base64Encoder.encode(filename.getBytes("utf-8"))
+ "?=";
}else {
// 其它浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
from:https://blog.51cto.com/u_16099353/7570382