用get请求传中文,经常搞到乱码,这几天搞搞这个东西,总结一下,以方便以后处理这类的问题。
Java代码中的URLEncoder.encode方法和JS的encodeURIComponent功能差不多,它会将处字母和数字,以及*字符外的都编码成%xx形式。
JS的unescape和decodeURI都不能用来解码JAVA中URLEncoder.encode编码的字符串。
在JAVA代码中的URLEncoder.encode的字符串可以在JS中用decodeURIComponent还原成字符串。
在JAVA代码中可以用URLDecoder.decode(request.getParameter("param"),"UTF-8")来将在JS中用encodeURIComponent的参数还原成字符串。
========================================================
1、decodeURI()定义和用法:
decodeURI() 函数可对 encodeURI() 函数编码过的URI 进行解码。
语法:decodeURI(URIstring)
参数 描述:URIstring 必需。一个字符串,含有要解码的 URI 或其他要解码的文本。
返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。
2、encodeURI 方法
将文本字符串编码为一个有效的统一资源标识符 (URI)。
encodeURI(URIString)
必选的 URIString 参数代表一个已编码的 URI。
说明
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、
"/"、";" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。
-----------------------------------------------------------------------------------------------------------
3、decodeURIComponent()定义和用法:decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
语法:decodeURIComponent(URIstring)
参数 描述:URIstring 必需。一个字符串,含有编码 URI 组件或其他要解码的文本。
返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。
4、encodeURIComponent() 方法:
把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( )。
因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。
========================================================
示例代码如下:
JavaScript代码encode
functionfindNE(){ varnd = document.getElementById("NE").value; nd = encodeURIComponent(encodeURIComponent(nd)); alert(nd); $.fn.zTree.destroy("netree"); setting.async.url="common/getNeList.action?seachName="+nd; $.fn.zTree.init($("#netree"), setting); }
java代码decode
String serchName = request.getParameter("seachName"); System.out.println("serchName1::::::::::::::::::::::"+serchName); if(StringUtils.isNotBlank(serchName)){ try{ serchName = java.net.URLDecoder.decode(serchName,"UTF-8"); }catch (UnsupportedEncodingException e) { e.printStackTrace(); } } System.out.println("serchName2::::::::::::::::::::::"+serchName);