由于各种原因,LZ项目团队已使用GBK编码。这是一个历史问题。中文乱码问题通常以页面编码和Java端解码的形式遇到,这既费时又费力,并且需要对中文字段进行特殊处理。
最近,Web端需要升级UI,并完全使用html5页面进行升级和开发。该浏览器版本也从最初仅支持IE的开发到使用Firefox和Google的开发。在版本测试期间,Firefox浏览器被发现中文乱码问题,所有带有中文参数的http请求都出现在浏览器的URL地址栏中,并且传递给Java端的参数是完全无法识别的。经过仔细研究,事实证明Firefox默认对获取请求的URI使用UTF-8编码,并且我们系统中tomcat服务器server.xml的配置为GBK编码,因此会产生乱码。使用诸如window.open,window之类的方案。页面以js模式(例如location.href)跳转,并以表单的get模式提交。
在解决问题的过程中,尝试了以下三种解决方案:
解决方案1:需要修改所有jsp页面编码配置,这是最彻底的解决方案,但是需要全球测试人员进行验证。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>经过测试,将jsp和server.xml同时修改为UTF-8编码,解决了中文乱码问题。
解决方案二:
使用post方法提交并弹出一个新页面,并添加方法openWindowWithPost。使用此方法,提交的新页面的地址栏没有参数列表,更加简洁安全。代码如下。
/*
* 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();
for(var i in data)
{
$("#hideform").append();
}
$("#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://www.pc-fly.com/a/shumachanpin/article-353841-1.html
那索罗斯