?????? ?由于种种原因,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