涌现的题目:
经由历程get要求向服务器发送要求时,假如要求参数为中文时,服务器端接受到的参数为乱码。
乱码缘由剖析及处置惩罚办法:
1、关于解码和编码
编码:'中'→1110001
解码:1110001→'中'
乱码:编码和解码历程中运用了差别的字符集
2、Web运用中字符编码解码的题目
(1)要求历程:
<1>GET要求
浏览器端是以UTF-8举行编码,所以在服务器端也应当以UTF-8举行解码
由于GET要求参数附着在URL地点背面,所以要一致的URL地点的解码字符集。
处置惩罚办法:
在tomcat配置文件server.xml中找到第一个connector到场以下属性 URIEncoding=UTF-8
<2>POST要求
在猎取要求参数前实行:request.setCharacterEncoding("UTF-8");
(2)相应历程
(1)指定相应数据的编码字符集
(2)通知浏览器相应数据应当运用什么字符集举行解码
<1>Tomcat服务器会自动依据“解码字符集”设置“编码字符集”
<2>设置编码字符集:通知浏览器当前相应数据的内容范例:response.setContentType("text/html;charset=UTF-8");须要注重的是,须要在response.getWriter();之前设置,不然无效。
发起:
一切的过滤器都只对POST要求起作用,在jsp页面中设置字符编码体式格局,都只是对表单提交时的POST要求起作用,对GET要求不能起到设置其字符编码的作用,
在GET要求中运用的是默许的编码体式格局,所以对GET要求,须要在server.xml文件中设置URIEncoding="UTF-8"然后重启TOMCAT便能够完成处置惩罚中文乱码题目,
然则不发起在href超链接要求中转达中文参数,也不发起在GET要求中通报中文参数。
别的对通报的部份中文完成通报和吸收时的一致的编码要领在转达参数时运用
"reply.jsp?title="+java.net.URLEncoder.encode(keywords)
然后在吸收参数页面运用keywords=new String(request.getParameter("keywords").getBytes("8859_1"));这类体式格局虽然临时处置惩罚了中文乱码题目,
然则在后期的保护和布置到其他的服务器时能够仍会会涌现中文乱码了题目,所以不发起运用。
关于Post要求,只需在Servlet或许jsp中写入以下代码就能够把处置惩罚从表单中传入的中文乱码题目
request.setCharacterEncoding("utf-8");
相识:
而关于Get要求,由于要求参数会被附加到地点栏的URL以后,所以不能用上面的处置惩罚要领。应当如许:
String str=request.getQueryString(); //运用URLDecoder解码字符串 String str1=java.net.URLDecoder.decode(str,"utf-8"); String[] paraStrings=str1.split("&"); //paraStrings[0]就是第一个参数,顺次类推... for(String paraString : paraStrings) { String[] nameValue=paraString.split("="); //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值 }
另有一种要领就是猎取要求参数以后对要求参数值从新编码,也就是先将其转换成字节数组,再将字节数组从新解码成字符串。
String str=request.getParameter("name"); byte[] bytes=str.getBytes("ISO-8859-1"); String name=new String(bytes,"utf-8");
结论:通报中文参数时,最好运用POST要求来提交。差别服务器设置编码体式格局能够差别,差别操作系统设置编码体式格局也能够差别。
引荐:java基础教程
以上就是java中要求乱码处置惩罚要领的细致内容,更多请关注ki4网别的相干文章!