1. 页面中文显示乱码

原因: response中的内容会先输入到response缓冲区,然后再输入到传给浏览器,所以要将缓冲区和浏览器的编码都设置成utf-8
1)未使用jsp,而是在servlet设置response输入内容中存在中文

  • 解决方案: 在response.getWriter()输出内容之前加上下面两行代码
response.setCharacterEncoding("UTF-8");// 设置缓冲区编码
response.setContentType("text/html;charset=UTF-8");// 设置浏览器编码

2)使用了jsp

  • 解决方案: 在jsp头部写上如下代码:
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

2.request乱码问题(在请求参数中带有中文)

原因:

  • 浏览器传输参数时使用的是ISO-8859-1编码不支持中文
  • 高版本tomcat中的新特性:就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])

解决方案:

  • 先将获取的参数用ISO-8859-1解码成二进制流,然后再用utf-8进行编码,代码如下:
String usernameString = new String(username.getBytes("ISO-8859-1"),"UTF-8");// username为获取的参数
  • 对于post请求还可以使用如下方法
request.setCharacterEncoding("utf-8");
  • 对于高版本的tomcat,在修改tomcat目录下的conf/catalina.properties中,找到最后注释掉的一行#
#tomcat.util.http.parser.HttpParser.requestTargetAllow=|

去除#并改成

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

表示把{}放行

3.设置附件下载时中文名没有了

原因: 不同浏览器会对附件的文件名进行解码 解决方案: 争对不同浏览器进行编码,代码如下:

// 获取客户端信息
String agent = request.getHeader("User-Agent");
// 定义一个变量记录编码之后的名字
String filenameEncoder = "";// 新附件的文件名,用于传给浏览器
if (agent.contains("MSIE")) {
// IE编码
filenameEncoder = URLEncoder.encode(filename, "utf-8"); // filename 是原附件的文件名
filenameEncoder = filenameEncoder.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐编码
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";// filename 是原附件的文件名
} else {
// 浏览器编码
filenameEncoder = URLEncoder.encode(filename, "utf-8");// filename 是原附件的文件名
}

最新文章

  1. Bootstrap框架的学习(二)
  2. SVN数据仓库迁移
  3. 在VMware的虚拟机平台上如何进行网络设置
  4. Part 2 How are the URL&#39;s mapped to Controller Action Methods?
  5. 在Windows下用MingW 4.5.2编译live555
  6. [Javascript] Advanced Reduce: Flatten, Flatmap and ReduceRight
  7. css如何实现背景透明,文字不透明?
  8. windows puppet manifests 文件维护
  9. 命令行启动Hololens Emulator,可解决内存不足的问题
  10. rabbitmq 死信邮箱配置(dead-letter)
  11. jQuery === 面条式代码?
  12. java中的“\t”
  13. IntelliJ IDEA 配置maven
  14. mysql 数据库学习笔记一
  15. 【交换机】交换机RLDP(环路检测&amp;链路检测)功能介绍及配置说明
  16. MySQL Error--The Table is full
  17. 2018.11.07 NOIP模拟 分糖果(贪心)
  18. 每天一个linux命令-tai命令
  19. django 使用Ajax方式POST JSON数据包
  20. Python 爬虫实战—盘搜搜

热门文章

  1. Vue学习之Babel配置(十六)
  2. koa2--session的实现
  3. 如何选择优秀的APS系统供应商?问自己这几个问题!
  4. redis 订阅者与发布者(命令行)
  5. Python3链接Oracle
  6. 通过cmd命令将jar放到maven仓库
  7. angular官网实例(综合)
  8. linux设备驱动程序-i2c(1):i2c总线的添加与实现
  9. pycharm——常用快捷键操作
  10. python 根据字符串语句进行操作再造函数(evec和eval方法)