中文乱码问题

通过举一个小例子,来记录一下如何排查getpost请求中的乱码问题。

一、举例

我们在idea中创建一个动态的web工程,并在项目中创建一个register.jsp文件。

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<html>
<body>
<form action="show.jsp" method="post">
    账号: <input type="text" name="name"> <br>
    密码: <input type="text" name="password"> <br>
    <input type="submit" value="登录">
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>展示</title>
</head>
<body>
   
    <%  
        request.setCharacterEncoding("utf-8");
        String name = request.getParameter("name");
        String password = request.getParameter("password");
    %>

<%
    out.println(name);
    out.print(password);
    %>
</body>
</html>

注:这里使用jsp是为了举例更加简单。

访问这个register.jsp

1005988-20190623192227821-1983013018.png

浏览器显示:

1005988-20190623192238035-11432568.png

可以观察到这里可以观察到中文是正常显示的。

二、乱码的排查

如果在从请求到响应的过程中出现了乱码问题。该如何排查呢?

这里全部以UTF-8来举例,也推荐使用UTF-8编码

首先检查IDE工具的编码

1005988-20190623192250595-1263133424.png

这样就将idea中文件的编码方式改成了utf-8,这里有一些注意的地方:对于进行设置之前创建的其他格式的文件,其编码格式还是保留原格式。

检查jsp代码中的编码设置

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

其中charset=UTF-8是就是告诉浏览器以UTF-8进行编码;

pageEncoding="UTF-8"如果jsp文件中出现了中文,这些中文使用UTF-8进行编码,这里最好与ide工具的问件编码格式保持一致。

区分请求方式是post还是get

  • tomcat7及以前, 默认编码设置是ISO-8859-1
<Connector port="8080"  protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

可以在后面添加URIEncoding="UTF-8"来将tomcat对于请求以UTF-8的编码格式进行处理。

  • tomcat8以后,默认编码设置是utf-8,不需要再做额外的处理,只对get请求有效。

我们推荐使用上面的方式来解决get请求乱码的问题,但是还可以这样做

        String name = request.getParameter("name");
        name = new String(name.getBytes("iso-8859-1"),"utf-8");
        String password = request.getParameter("password");
    %>

既然已经知道tomcat7之前是使用iso-8859-1l来进行编码,我们可以先进行解码,再重新编码。

byte[] bytes=  name.getBytes("ISO-8859-1");
name = new String(bytes,"UTF-8");

上面两句等价于

request.setCharacterEncoding("UTF-8"); 

这一句加在获取请求参数之前。

总结

在编码中,前端、后端、数据库以及各个角落存在着编码格式的设置,我们需要注意保持编码格式的统一,一般就不会在出现终文乱码的问题了。

转载于:https://www.cnblogs.com/heliusKing/p/11073839.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值