有关tomcat项目中乱码的问题解决合集

导语:乱码问题产生的原因主要是字符编码的问题;
发送方要发送一串字符,首先必须用字符集给它编码变成0和1即二进制进行传输,接收方需要用同一个字符集进行解码(decode)方才能知道发送方发送的内容。如果双方所用的字符集不一致就会产生乱码。

有关tomcat服务乱码的问题解决合集

控制台乱码

在这里插入图片描述设置Tomcat中 conf下logging.properties中所有的UTF-8编码为GBK即可
在这里插入图片描述

原理----> 原因是windows中默认中文字符集为GBK,但是tomcat中日志输出为UTF-8,GBK对UTF-8显然是字符集不匹配;

post请求乱码

产生原因----->>>图解
在这里插入图片描述
解决方式—>
通过HttpServletRequest设置请求编码

/处理post请求乱码/
req.setCharacterEncoding(“UTF-8”);
在这里插入图片描述那我可不可以指定字符编码为GBK呢?

在这里插入图片描述原因在与这是项目本身运行环境字符集编码为UTF-8,
所以也会产生乱码(但至少不是?之类的符号了)

get请求乱码

在之前版本的tomcat中get方式提交的数据可能会遇到修改server.xml中uri编码格式的情况,但是这在tomcat9已经解决了该问题
在这里插入图片描述 <Connector port=“8080” protocol=“HTTP/1.1”

             connectionTimeout="20000"

             redirectPort="8443" URIEncoding="utf-8"  />

另一种是需要手动进行编码解码,注意:

req.setCharacterEncoding(“UTF-8”); 这种方式只对post提交方式有效;
这一点在tomcat9之前的版本可以体现,因为版本较旧,就不在演示了

响应乱码

浏览器将数据发送给tomcat服务器,服务器解析,当解码的字符集匹配但是发送的时候指定的编码集与数据类型不一致也会产生乱码问题,比如发送图片(ASCII),响应时指定字符集为文本(GBK),
在这里插入图片描述

通过HttpServletResponse设置响应编码
手动编码解码-----
//以UTF-8编码处理数据
resp.setCharacterEncoding(“UTF-8”);
解析为文本,是html文件
resp.setContentType(“text/html”);在这里插入图片描述或者设置tomat连接器的编码格式—
//设置响应头,以便浏览器知道以何种编码解析数据
resp.setContentType(“text/html;charset=UTF-8”);

总结------->>>>
当没有指定解码方式和响应的数据类型(包括响应的数据编码格式)—>>
在这里插入图片描述指定解码方式和响应的数据类型(包括响应的数据编码格式)----->>>
手动编码解码
在这里插入图片描述设定URL的编码格式
在这里插入图片描述

这里补充一点-------
还有一种比较费劲的方式-----
在这里插入图片描述
这种方式也会得到正常解析,那要浏览器干嘛?如果发送的是图片或者其他的内容岂不很麻烦?在这里插入图片描述

小结:—>>
如何解决POST请求中文乱码问题,GET的又如何处理呢?

(1) 解决post请求乱码问题:

在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

  <filter>
 <filter‐name>CharacterEncodingFilter</filter‐name>
 <!--自带一个过滤器-->
 <filter‐class>org.springframework.web.filter.CharacterEncodingFilter</fi
lter‐class>

 <init‐param>
 <param‐name>encoding</param‐name>
 <param‐value>utf‐8</param‐value>
 </init‐param>
 </filter>

<filter‐mapping>
 <filter‐name>CharacterEncodingFilter</filter‐name>
 <url‐pattern>/*</url‐pattern>
 </filter‐mapping>

(2)get请求中文参数出现乱码解决方法有两个:

①修改tomcat配置文件添加编码与工程编码一致,如下:

1 <ConnectorURIEncoding=“utf‐8” connectionTimeout=“20000” port=“8080” proto
col=“HTTP/1.1” redirectPort=“8443”/>

②另外一种方法对参数进行重新编码:

String userName = new 

String(request.getParamter(“userName”).getBytes(“ISO8859-

1”),“utf-8”)

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeMartain

祝:生活蒸蒸日上!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值