JavaWeb request获取参数造成的中文乱码问题解决方法

一、乱码原因

当我们使用request对象,发送请求时,会对你要获取的参数进行编码。在此过程中使用的编码方式是ISO8859-1的编码方式。而这种编码方式是不支持中文的,所以会造成乱码。

二、解决方法

首先介绍通用的解决方法,对于get和post提交方式都适用
我们先在html中写入一个简单的表单,表单的提交方式设置为post
在这里插入图片描述
然后我们在service方法中写入代码来获取我们输入的姓名,并在控制台输出

  String parameter = request.getParameter("username");
  System.out.println(parameter);

运行html文件,此时我们在浏览器中输入内容,点击提交按钮后
在这里插入图片描述
在这里插入图片描述
我们可以看到,在控制台输出的内容为乱码
这是因为获取参数时采用了ISO8859的编码方法,所以要想解决问题我们就需要将现在的乱码转为乱码前的二进制位。再使用UTF-8的编码方式
在之前的基础上我们增添增添代码,最后再次在控制台输出一次编码后的参数
再次运行,输入与之前相同的数据,在控制台中查看结果

     String parameter = request.getParameter("username");
     System.out.println(parameter);

      //将乱码转回用ISO8859-1编码前的二进制位
      byte[] bytes = parameter.getBytes("ISO8859-1");
      //再使用UTF-8进行编码
      parameter = new string(bytes,"UTF-8");
      
      System.out.println(parameter);

在这里插入图片描述
可以看到经过重新编码,中文乱码问题得到了解决

三、注意事项

刚才我们介绍了通用方法,但我们也可以发现他的弊端,就是如果输入的数据量很大,就会很繁琐。所以针对使用post的提交方式我们可以使用一种更为简单的方式来解决乱码的问题。
注:使用get的提交方式时该方法不适用! 不适用! 不适用!

对于使用的是post提交方式我们只需要在获取参数前加上一行代码就可以解决问题。

  request.setCharacterEncoding("UTF-8");
  String parameter = request.getParameter("username");
  System.out.println(parameter);

运行程序,输入数据,再次查看控制台的输出信息可以看到中文乱码问题也得到了解决
在这里插入图片描述

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
JavaWeb,可以通过编写过滤器解决post请求方式中文乱码问题。具体步骤如下: 1. 创建一个过滤器类,实现javax.servlet.Filter接口。 2. 在过滤器类重写doFilter方法。 3. 在doFilter方法获取请求的编码方式,并将请求的数据按照该编码方式进行解码。 4. 在doFilter方法修改请求的编码方式为UTF-8,并将修改后的请求传递给下一个过滤器或Servlet进行处理。 具体代码如下: ```java import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @WebFilter(filterName = "EncodingFilter", urlPatterns = "/*") public class EncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; // 获取请求的编码方式 String encoding = request.getCharacterEncoding(); if (encoding == null) { encoding = "UTF-8"; // 默认编码方式为UTF-8 } // 将请求的数据按照指定编码方式进行解码 servletRequest.setCharacterEncoding(encoding); // 修改请求的编码方式为UTF-8 servletResponse.setContentType("text/html;charset=UTF-8"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { } } ``` 在上述代码,我们使用@WebFilter注解来指定该类为过滤器,并且设置了过滤的urlPatterns为"/*",表示对所有请求进行过滤。 在doFilter方法,我们首先获取请求的编码方式,并将请求的数据按照该编码方式进行解码。然后,我们将请求的编码方式修改为UTF-8,并将修改后的请求传递给下一个过滤器或Servlet进行处理。 需要注意的是,如果你使用了Spring框架,则可以通过在配置文件添加如下配置来解决中文乱码问题: ```xml <filter> <filter-name>encodingFilter</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> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 在上述配置,我们使用了Spring框架提供的CharacterEncodingFilter过滤器来解决中文乱码问题。可以通过在配置文件添加该过滤器来自动解决中文乱码问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值