Servlet相关的几种乱码
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 是原附件的文件名
}
Servlet相关的几种乱码的更多相关文章
- Servlet相关的几种中文乱码问题
Servlet相关的几种中文乱码问题浏览器调用jsp,html等页面中文显示乱码使得文件本身以utf-8字符集编辑保存 让浏览器浏览器以utf-8字符集解析 在浏览器中右键选择编码格式为utf-8: ...
- Servlet中response、request乱码问题解决
Java Web(二) Servlet中response.request乱码问题解决 三月不减肥,五月徒伤悲,这就是我现在的状态,哈哈~ 健身.博客坚持. --WH 一.request请求参数出现 ...
- Java Web之Servlet中response、request乱码问题解决
Java Web之Servlet中response.request乱码问题解决 一.request请求参数出现的乱码问题 get请求: get请求的参数是在url后面提交过来的,也就是在请求行中, ...
- Servlet相关学习
Servlet入门解析 概念 运行在服务器端的小程序 servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则 实现servlet接口.复写方法 快速入门 创建web项目 ...
- JavaWeb学习——Servlet相关的接口和类
JavaWeb学习——Servlet相关的接口和类 摘要:本文主要学习了Servlet相关的接口和类. Servlet的接口和类 三种方式 实现Servlet有三种方式: 实现javax.servle ...
- SpringBoot系列教程web篇Servlet 注册的四种姿势
原文: 191122-SpringBoot系列教程web篇Servlet 注册的四种姿势 前面介绍了 java web 三要素中 filter 的使用指南与常见的易错事项,接下来我们来看一下 Serv ...
- Servlet相关接口和Servlet的生命周期
http://www.cnblogs.com/luotaoyeah/p/3860292.html Servlet相关接口和Servlet的生命周期 创建一个Servlet类最直接的方式是实现javax ...
- struts2的action访问servlet API的三种方法
学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object g ...
- servlet获取request数据的乱码解决
例如请求中有: /score?type=Mana&name=${user.name} ***************************************************** ...
随机推荐
- v8--sort 方法 源码 (1) 插入排序法
v8--sort方法源码中对于长度较短的数组使用的是插入排序法. 部分源码: function InsertionSort(a, from, to) { for (var i = from + 1; ...
- jq对象才能使用jq方法,$(".a").eq(0) 和 $(”.a“)[0]
<a class="a"></a> <a class="a"></a> <a class="a& ...
- chrome浏览页面常用快捷键
1.chrome浏览页面常用快捷键 Ctrl+N 打开新窗口. Ctrl+T 打开新标签页. Ctrl+W关闭当前标签 Ctrl + F4 关闭chrome浏览器 Ctrl+Tab 或 Ctrl+Pg ...
- Nginx配置Yii:backend&frontend
#My vlson.top project #frontend server { listen 80; server_name www.vlson.com; #charset koi8-r; set ...
- K9F1G08U0B K9F2G08U0A K9F2G08U0M
*L must be set to "Low" Ax表示bit,分5个周期写,一次一个Byte 原理图 引脚定义 命令 Program Erase Read 实验程序 https: ...
- Flask入门很轻松 (一)
转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10956837.html Flask诞生于2010年,是Armin ronacher(人名)用 Py ...
- pyecharts绘制geo地图
pyecharts是一种非常强大的绘图python库,绘制的图形非常好看,并且有代表性,不仅仅是地图,还可以绘制条形图.饼图.词云图等等. # 安装方法 pip install pyecharts # ...
- jquery 属性筛选选择器
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...
- P1525 关押罪犯[扩展域并查集]
题目来源:洛谷 题目描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1−N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整 ...
- 如何使用git,进行项目的管理
1.首先,现在git上个创建一个项目, 2.然后在本地创建一个springboot工程 3.使用git命令 git init 将这个springboot项目交给git进行管理 4.创建一个dev分 ...