javaweb请求响应编码问题详解

javaweb请求响应编码问题详解

前言:
编码基础的概念
ISO-8859-1:单字节编码,英文编码。
GB2312/GBK:汉字编码,GBK兼容GB2312.
Unicode:java的编译编码。
UTF-8:可以用来表示所有语言的编码。

1、请求html文件乱码问题

解决:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

为什么请求html文件会乱码?
由于网页的编码方式和内容的编码方式不一样。在解析时就会出现乱码问题。
如何查看网页的编码方式?
打开浏览器控制台输入:document.characterSet

示例:
在这里插入图片描述
解析:由于内容中存在中文字符,所以需要文件的编码方式需要采用可编码中文的,一般就用UTF-8,采用不匹配的编码方式,会在文件中出现乱码问题。这里把网页解析的编码方式注释了,就会出现下面的情况。

(指定了网页的编码方式,只要加上这行代码,就不会出现html的乱码问题)

在这里插入图片描述
在这里插入图片描述
总结:html 乱码问题,检查文件的编码方式和网页编码方式
(meta http-equiv="Content-Type" content="text/html; charset=utf-8" />)

在项目新建时。统一设置项目文件编码方式:UTF-8

2、JSP页面乱码问题

解决:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="utf-8" %>

访问jsp的本质是访问Servlet,JSP转换为java文件并编译到字节码文件的过程中存在编码。所以访问jsp文件的过程如下:
(ps:idea 的web项目默认存放路径 C:\Users\.IntelliJIdea2019.2\system\tomcat\Unnamed_coding\work\Catalina\localhost\coding_war_exploded\org\apache\jsp)

  • 第一次:转换为.java文件;
    JVM将JSP编译为.java文件。在这个过程中pageEncoding就起到作用了,JVM首先会获取pageEncoding的值,如果该值存在则采用它设定的编码来编译,否则则采用file.encoding编码来编译。如果不设置pageEncoding,会导致在转换成java文件时,中文出现乱码问题。
  • 第二次:转换为.class文件;
    JVM将.java文件转换为.class文件。在这个过程就与任何编码的设置都没有关系了,不管JSP采用了什么样的编码格式都将无效。经过这个阶段后.jsp文件就转换成了统一的Unicode格式的.class文件了。
  • 第三次:业务逻辑处理后输出。
    后台经过业务逻辑处理后将产生的结果输出到客户端。在这个过程中contentType的charset就发挥了功效。如果设置了charset则浏览器就会使用指定的编码格式进行解码,否则采用默认的ISO-8859-1编码格式进行解码处理。设置ContentType的作用等同于:response.setContentType(“text/html;charset=UTF-8”),设置了在浏览器的编码方式。
    在这里插入图片描述

3、form表单Get提交编码问题

解决:

  • 第一种方法:在tomcat的server.xml文件中设置编码方式
   <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />
  • 第二种方法:在servlet中 通过这种方式接收参数
String param1 = new String(req.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

分析:get请求提交数据时。其数据是附加在URL上,从Tomcat5.0以后,对URL的数据默认才用ISO-8859-1的方式进行编码,此时页面设置的编码无效( content=“text/html; charset=utf-8” /),所以这时单纯通过 req.setCharacterEncoding(“UTF-8”);是无效的,需要按以上的方法解决乱码问题。

4、form表单POST方式提交

解决:

req.setCharacterEncoding("UTF-8");

分析:Post提交的几种编码方式
1.application/x-www-form-urlencoded:原生form表单

2.multipart/form-data:上传文件时

3.application/json:JSON格式

4.text/xml

5、服务器端返回时 乱码问题

解决:
第一种方式:

response.setContentType("text/html;charset=utf-8");//设定返回的编码方式,告诉浏览器自适应当前的编码

第二种方式:

response.setHeader("content-type", "text/html;charset=utf-8");//等同于第一种

第三种方式:

response.setHeader("content-type", "text/html");  //等同于上面两种
response.setCharacterEncoding("utf-8");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值