javaWeb乱码解决方案总结

本文介绍了解决Web应用中出现的中文乱码问题的方法,包括使用Spring框架的字符编码过滤器、确保项目环境与页面编码一致、处理GET与POST请求中的乱码问题以及配置Tomcat服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、项目使用框架

解决方案:如果使用spring框架 则可以使用编码过滤器,配置如下

 <!-- 字符编码过滤器 -->
  <filter>
  	<filter-name>encoding</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	<init-param>
  	  <param-name>encoding</param-name>
  	  <param-value>UTF-8</param-value>
  	</init-param>
  	<init-param>
  	<param-name>forceEncoding</param-name>
  	<param-value>true</param-value>
  	</init-param>
  </filter>

二、项目环境编码与jsp页面页面编码一致

右键项目-》Properties-》Resource 选择编码  比如选择的编码是UTF-8

那么jsp页面编码也必须是utf-8

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>

三、servlet获取参数乱码

这里强调一点,在此使用的tomcat没有经过任何的修改与配置。
当页面通过两种方式请求Servlet的时候,参数的编码原本为UTF-8,在通过HTTP服务将请求发送出去的时候,会将参数重新按照ISO-8859-1编码后发送。因此,不管GET或POST方式,Servlet接收到的参数数据的编码均为ISO-8859-1,必须重新转码为UTF-8,才能正确显示中文参数。

1、GET方式的请求与接收过程

页面中参数“param=中文”的编码原本为GBK,当用GET方式发送参数的时候,参数值会被Web服务器从GBK转码为ISO-8859-1。
Servlet接收到的GET请求参数的编码当然为ISO-8859-1了,对于中文肯定显示不了,因此要将ISO-8859-1转换为GBK就可以正常显示中文了。
                String param = request.getParameter("param"); 
                String x = new String(param.getBytes("ISO-8859-1"), "UTF-8"); 
                System.out.println("GET方式获取的中文参数值:" + x);
 
 

2、POST方式请求与接收过程

页面中参数“param=中文”的编码原本为GBK,当点击页面中提交按钮后,参数会以UTF-8编码格式发送给Servlet,因此Servlet接收参数的时候必须将请求的编码明确设定为UTF-8,这样才能正确接收中文。
                request.setCharacterEncoding("UTF-8"); 
                String param = request.getParameter("param"); 
                System.out.println("POST方式获取的中文参数值:" + param);
 
或者,可以按照get方式来接收post的参数:
                String param = request.getParameter("param"); 
                String x = new String(param.getBytes("ISO-8859-1"), "UTF-8"); 
                System.out.println("GET方式获取的中文参数值:" + x);
 
 
疑问:为什么在GET方式下不设定请求的编码格式呢?原因是GET方式使用的编码为ISO-8859-1,用GBK、UTF-8等接收效果都是一样的(都是一堆字母和符号),编不编都一个样,如果指定ISO-8859-1编码是多一翻手续,如果指定了非ISO-8859-1编码,是脑子还不清醒,没搞明白这个原理,因此,GET方式就不要指定请求的编码了。

四、配置tomcat编码

修改tomcat  conf文件夹下的server.xml  添加URIEncoding属性

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"  URIEncoding="UTF-8"/>



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值