一切福田,不離方寸,從心而覓,感無不通。

Java ResponseEntity乱码 javaee出现乱码怎么解决

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