javaweb开发中get乱码,网上很多都说用这个方法 String str = new String(request.getParameter(“username”).getBytes(“ISO-8859-1”),”UTF-8”); 其实不然,这是你指定了服务器的默认编码是ISO-8859-1,服务器要是其他编码仍然出现乱码,例如tomcat7前的都是ISO-8859-1,tomcat8开始却使用的UTF-8默认编码,所以还是没有解决,比如我换其他的web服务器呢 所以引用第二种解决办法: 对url进行2次编码,2次解码(一次服务器会帮我们做的,实际我们是进行一次解码) 具体实现: 一、web页面(有2中方式) 1、使用js的encodeURI来编码
encodeURI(encodeURI("中国"));2、是jsp里使用
<%=java.net.URLEncoder.encode(java.net.URLEncoder.encode("中国","UTF-8"),"UTF-8")%>二、服务器端解码处理
String name=request.getParameter("name"); String strName=URLDecoder.decode(name, "UTF-8");原理和理解 两次encodeURI的原因总结(一句话,你见过字母和数字出现乱码的吗?从来没有,也不可能有) 下列子以中文“中国”来说明 第一次encodeURI得到的都是英文(它解码就会出现乱码) 中国 一次encodeURI编码–> 中国 解码必须要知道是什么编码,否则肯定乱码 第二次encodeURI得到的仍然都是英文(它解码不可能出现乱码) 中国 二次encodeURI编码–> %E4%B8%AD%E5%9B%BD 无论用什么来解码,肯定不会乱码(因为都是字母和数字)
编码了2次的数据发往服务器 服务器接收到数据了, 会以它默认的设置编码进行解码一次, 无论它以什么编码来解的码都不会乱码,因为都是字母和数字
然后我们得到数据了再以指定的编码来解码就不会乱码
原理图: