关于get和post请求中文乱码的解决办法

web项目中经常遇到中文乱码问题,本文简单记录遇到中文乱码问题时的解决方案,代码如下:

我们可以看到这是一段典型的form表单提交的代码,在后台中我们通过request请求获取输入框内的值,这时输入中文字符后出现乱码。(在查找问题之前,先确保eclipse的字符集和jsp页面的字符编码均为utf-8)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

eclipse检查方式window>preferences>General>Workspace。

确保无误后进行下面的操作,我们首先想到的是在通过request对象获取参数前,设置utf-8编码

request.setCharacterEncoding("utf-8");
String typeName=request.getParameter("productTypeName");
尝试后乱码问题依然存在,随后在form表单中加上method="post"后问题解决。
问题总结如下:

先前form表单中没有设置提交请求的方式,默认为get请求,使用get请求时,请求参数回被附加在url地址后并传给服务器,tomcat会先自动解析get请求传送过来的url字符

串(暂时先这么理解,后续有进一步了解后会对本片进行更新),而tomcat对网络请求处理时的默认字符集是ISO8859-1,这种情况下必定是会出现乱码的。

当form表单提交请求方式为post时,在获取request中的参数前加上request.setCharacterEncoding("utf-8")可以有效解决乱码问题。

request.setCharacterEncoding("utf-8");
String typeName=request.getParameter("productTypeName");

那么对于get请求,我们如何避免中文字符乱码呢?我们可以在tomcat的配置文件中进行字符编码的修改,tomcat安装目录>conf>server.xml中找到下面这行标签

在这个标签中加上URIEcoding="UTF-8"即修改默认字符编码为utf-8。


除了上述方法,还可以吧原有的参数拆分成byte数组后再通过该数组生成指定编码的String,这是一个万能的方法

String productTypeName=request.getParameter("productTypeName");
byte[] bytes=str.getBytes("ISO-8859-1");
productTypeName=newString(bytes,"utf-8");



你可能感兴趣的:(工作随笔)