目录
1、乱码原因和解决思路
2、准备知识(新手必读,老司机跳过)
2.1 字符集
2.2 URL编码
2.3 javaweb servlet
3 浏览器编码/解码使用字符集的逻辑优先顺序
3.1 浏览器解码使用的字符集优先级
3.2 浏览器编码使用的字符集
3.2.1 URL直接访问
3.2.2 html form 表单发送http get/post请求
4、http get请求参数乱码:浏览器发送给后端servlet
4.1 设置发送端(浏览器)url编码的字符集
4.1.1 get 第一类场景:URL直接访问
4.1.2 get 第二类场景: html form表单发送http get请求
4.2 设置接收端(servlet)url解码的字符集
4.2.1 方案1【不推荐】:通过new String()方式转码
4.2.2 方案2【推荐】:使用过滤器方法给所有servlet参数转码
4.2.3 方案3【强烈推荐】:设置tomcat解码的字符集为UTF-8
4.2.4 方案4【推荐】:用post
5 http post请求参数乱码:浏览器发送给后端servlet
5.1 设置发送端(浏览器)编码的字符集
5.2 设置接收端(servlet)解码的字符集
5.2.1 方案1【不推荐】:通过new String()方式转码
5.2.2 方案2【不推荐】:通过req.setCharacterEncoding("UTF-8")方式转码
5.2.3 方案3【推荐】:使用过滤器方法给所有servlet参数转码
6、http响应数据乱码:servlet发送给浏览器等客户端
6.1 设置发送端(servlet)对数据编码的字符集
6.2 告诉接收端(浏览器等)数据解码的字符集
7、http响应html页面乱码:tomcat发给浏览器
7.1 设置发送端(servlet)对html页面编码的字符集
7.2 设置接收端(浏览器)对html页面解码的字符集
8、http响应jsp页面乱码:tomcat发给浏览器
8.1 设置发送端(servlet)对jsp页面编码的字符集
8.1.1 方式一【不推荐】:以idea为例,右下角可以修改jsp等文件编码
8.1.2 方式二【推荐】:在文件头设置 pageEncoding,idea的jsp文件编码以此为准(右下角编码变灰色,不可改)
8.1.3 方式三【推荐】:在文件头设置 contentType="text/html;charset=UTF-8",该设置会覆盖“方式二”的设置(看下面的源码)
8.2 设置接收端端(浏览器等)对jsp页面解码的字符集
8.2.1 方式一【不推荐】:在响应体head中添加meta charset="UTF-8"
8.2.2 方式二【推荐】:在文件头设置 pageEncoding
8.2.3 方式三【推荐】:在文件头设置 contentType="text/html;charset=UTF-8",该设置会覆盖“方式二”的设置(看下面的源码)
9、tomcat日志在idea种乱码
9.1 设置输出日志的编码字符集
9.2 设置idea控制台解码的字符集
【JavaWeb开发】Servlet彻底解决开发中请求(get/post)、应答以及控制台中文乱码问题
导致乱码原因都是因为字符编码和解码用的字符集不一致导致,解决乱码问题需统一编码和解码的字符集,建议都用UTF-8
HTML URL 编码参考手册 | 菜鸟教程HTML URL 编码 参考手册 URL 编码会将字符转换为可通过因特网传输的格式。 URL - 统一资源定位器 Web 浏览器通过 URL 从 web 服务器请求页面。 URL 是网页的地址,比如: https://www.runoob.com。 URL 编码 URL 只能使用 ASCII 字符集来通过因特网进行发送。 由于 URL 常常会包含 ASCII 集合之外的字符,URL 必须转换为有效的 ASCII 格式。 ..https://www.runoob.com/tags/html-urlencode.html
Servlet 教程 | 菜鸟教程Servlet 教程 Servlet 为创建基于 web 的应用程序提供了基于组件、独立于平台的方法,可以不受 CGI 程序的性能限制。Servlet 有权限访问所有的 Java API,包括访问企业级数据库的 JDBC API。 本教程将讲解如何使用 Java Servlet 来开发基于 web 的应用程序。 现在开始学习 Servlet! 谁适合阅读本教程? 本教程是专为 Java 程序员设计的。在阅读本教程之前,需要先了解..https://www.runoob.com/servlet/servlet-tutorial.html
浏览器输入url网址,服务器tomcat会对应的响应(html、jsp、json等),浏览器是用什么字符集解码的呢?结论如下:
1.http响应头中的字符集 > 2. html/jsp页面中的字符集 > 3.使用默认字符集(不同浏览器不同)
1、首先,浏览器先从响应头读取 Content-Type 的 charset 的字符集

2、其次,从响应体中(包括html文件) 的 中读取字符集

3、如果上面两个都没有,则使用默认的字符集(不同浏览器不同)
4、补充,IE和360浏览器可以右键修改页面使用的字符集,修改后解码 和 编码(get url编码、post请求体编码等)都以修改后的为准,但是只对本窗口有效。

3.2.1 URL直接访问
直接访问指的是:在地址栏输入带参数url访问,浏览器会使用默认字符集UTF-8对URL的非ASCⅡ字符进行编码。详细说明:
- 浏览器输入URL直接访问一般是首次打开一个网站(对浏览器 [ 非postman ] 而言,是必然是http get 请求,不会是post,因为浏览器发post请求需要 html 的 form 表单发送),由于还未收到服务器任何响应,无从获取服务器的字符集,所以会使用默认字符集UTF-8对URL的非ASCⅡ字符进行编码(亲测当前主流新版浏览器都是用UTF-8字符集)。
- IE可以修改默认设置,不用UTF-8,没啥意义

3.2.2 html form 表单发送http get/post请求
html
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/40804.html