Post请求中中文乱码的原因
- Post请求中参数是通过request.getReader(),来获取流中的数据
- Tomcat在获取流的时候采用的是ISO-8859-1
- ISO-8859-1编码是不支持中文的,所以会出现乱码
解决方案:
- 页面的编码格式设置为utf-8
- Tomcat在获取流流之前将编码设置为utf-8
- 通过request.setCharacterEncoding("utf-8")设置编码
解决Post请求乱码的问题不适用于Get请求,Get请求出现乱码的原因:
- Get请求获取参数的方式是:request.getQueryString(),Post请求获取参数的方式是request.getReader()
- request.setChacterEncoding("utf-8")是设置request处理流的编码
- getQueryString()没有通过流的方式去获取参数
Get请求乱码的原因:
- 浏览器通过Http协议发送请求和数据给后台服务器
- 浏览器在发送Http的过程中会对中文数据进行URL编码
- 在进行URL编码的时候会采用<meta>标签指定的utf-8方式进行编码
- 后台服务器接收到编码后的数据会用ISO-8859-1进行解码
- 由于编码和解码采用的格式不一样,就会出现乱码的问题
URL编码:
URLEncoding.encoder("要编码的字符串","字符集")
URL解码
URLdecode("要解码的字符串","字符集")
解决:先解码再编码
new String(username.getBytes("ISO-8859-1"),"UTF-8");
此方法Post和Get请求都适用