关于使用get请求时候,在传递的参数中有中文字符时候出现乱码问题的原因
1.服务器:服务器按照默认的iso-8859-1进行解码。
A、post方式
post方式属于表单提交,参数存在于请求体中,只需要如下配置即可。
request.setCharacterEncoding("utf-8”)
B、get方式
get方式提交的参数会跟在请求行中的uri后边,服务器按照默认的iso-8859-1进行解码;
解决的方法(一般选第一种):
1.客户端对参数进行两次EncodeURI.encode操作
原理:
如果只进行一次encodeURI,得到的是UTF-8形式的URL,服务器端通过request.getParameter()解码查询参数(通常是iso-8859-1)就会得到乱码(服务器按照默认的iso-8859-1进行解码)。
进行两次encodeURI,第一次编码得到的是UTF-8形式的URL,第二次编码得到的依然是UTF-8形式的URL,但是在效果上和第一次进行一次UTF-8编码(此时全部转换为ASCII字符,没有多字节字符了),第二次进行一次iso-8859-1编码是一样的.
因为对英文字符来说, UTF-8编码和ISO-8859-1编码的结果相同。在服务器端,
首先通过request.getParameter()自动进行第一次解码(可能是gb2312,gbk,utf-8,iso-8859-1等字符集,对结果无影响)得到Ascii字符,然后再使用UTF-8进行第二次解码,通常使用java.net.URLDecoder.decode("","UTF-8")方法。
2.服务端将解码格式直接配置为utf-8,那么客户端只要进行一次编码就好