?????? ?由于种种原因,LZ项目组中一直使用GBK编码,这个属于历史遗留问题。往常遇到中文乱码问题,基本都是采取页面编码,java端解码的方式进行,费时且费力,需要对中文字段进行特殊处理。
??????? 近期,web端需要进行UI升级,全面使用html5的页面进行升级开发,浏览器版本也从原来的仅支持IE一款,发展为火狐和谷歌一同使用,版本测试期间发现了火狐浏览器的中文乱码问题,所有浏览器url地址栏出现中文参数的http请求,传递到java端参数都面目全非。仔细研究发现,原来是火狐浏览器对于get请求的URI默认使用UTF-8编码,而我们系统中tomcat服务器server.xml的配置为GBK编码,因此产生乱码,使用场景如:window.open、window.location.href等js方式的页面跳转,以及form表单的get方式提交。
问题解决的过程中,一共尝试了三种解决方案,列举如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<Connector acceptCount="50" connectionTimeout="20000" enableLookups="false" maxThreads="100" port="12345" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
/* * post方式打开新窗口 *@param url open窗口要打开的地址 *@param data 参数对象 *@param windowType 1新页签,2弹出窗口 *@param windowParam 打开窗口的参数,例如status=yes,toolbar=no,menubar=no,location=no,width=,height,top=,left= */ function openWindowWithPost(url,data,windowType,windowParam) { if($("#hideform").length > 0) { $("#hideform").remove(); } $(document.body).append(‘<form action="" method="post" id="hideform"></form>‘); for(var i in data) { $("#hideform").append(‘<input type="hidden" id="‘+i+‘" name="‘+i+‘" value="‘+data[i]+‘"/>‘); } $("#hideform").attr("action",url); var toDay = new Date(); windowname="win"+toDay.getTime(); window.open(windowType == 1 ? "about:blank" : "_blank",windowname,windowParam); $("#hideform").attr("target",windowname); $("#hideform").submit(); }使用方法也很简单,案例如下:
var data = {}; data["param1"] = "aaa"; data.param2 = true; data.param3 = 100; openWindowWithPost(url,data,1,"");
encodeURIComponent(param1)
public static String decodeStr(String sourceStr) { if(!StringUtil.IsEmpty(sourceStr)) { try { sourceStr = URLDecoder.decode(sourceStr, "UTF-8"); } catch (UnsupportedEncodingException e) { } } return sourceStr; }
原文:http://songfeng-123.iteye.com/blog/2246377