HttpServlet网络连接中出现的中文乱码问题的解决方法

0.README


Tomcat默认的编码格式是ISO8859-1,而网络字符流通用的编码格式是UTF-8,因此会出现一些中文字符乱码问题,本文提出了在responserequest、和下载文件的三种情况下的解决方案。

1.servlet是什么


Servlet是一个运行在Web服务器上的Java小程序,通常通过HTTP(the HyperText Transfer Protocol,超文本传输协议)来响应来自Web客户端的请求。

实现方式:
javax.servlet是一个接口,实现该接口的类主要有两个:javax.servlet.GenericServlet, javax.servlet.http.HttpServlet,前一个是后一个的父类,前一个与传输协议无关,后一个针对HTTP协议。
所以实现方式是继承这两个实现类。

2.中文乱码问题


(1) 字节流响应时

问题描述:

OutputStream os = response.getOutputStream;
os.write("中文内容".getBytes); 
// 会使用服务器本地默认编码,而客户端也会用本地默认编码解析,因此可能会出错

解决方法:

  • 1.用响应头
response.setHeader("Content-Type", "text/html;charser=UTF-8");
os.write("中文内容".getBytes("UTF-8"));
  • 2.用meta标签模拟
os.write("<meta http-equiv='Content-Type' content="text/html;charser=UTF-8"); // 和方法1类似
os.write("中文内容".getBytes("UTF-8"));
  • 3.Servlet特性(推荐)
response.setContentType("text/html;charser=UTF-8");
os.write("中文内容".getBytes("UTF-8"));


(2) 字符流响应时

问题描述:

PrintWriter pw = response.getWriter();
pw.write("中文内容"); // Tomcat服务器默认采用iso-8859-1,会乱码

解决办法:

  • 设置Tomcat输出编码
response.setCharacterEncoding("UTF-8"); // 两个功能:1.告知Tomcat字符串输出编码;2.告知客户端编码


(3) 下载中文名文件时

问题描述:

// 设置响应头
response.setHeader("Content-Disposition", "attachment;filename=中文.jpg"); // 文件名会乱码
response.setHeader("Content-Type", "application/octet-stream");
// 找到文件位置
String path = getServletContext().getRealPath("/WEB-INF/中文.jpg");
// 输出流
OutputStream os = response.getOutputStream();
InputStream is = new FileInputStream(path);
int len = -1;
byte[] buffer = new byte[1024];
while((len = is.read(buffer)) != -1){
    os.write(buffer, 0, len);
}
os.close();
is.close();

解决办法:

  • URL编码
response.setHeader("Content-Disposition", 
    "attachment;filename="+URLEncoder.encode("中文.jpg","UTF-8"); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值