Solaris上中文请求乱码

Solaris上中文请求乱码

项目概况:

过滤器使用GBK处理中文

对于汉字,使用Post方式没有乱码,使用get方式在Solaris平台上的Weblogic服务器出现乱码。

环境

WinXP+Tomcat5.5.28

OS 名称:          Microsoft Windows XP Professional

OS 版本:          5.1.2600 Service Pack 3 Build 2600

没有乱码现象出现。

Solaris平台出现乱码

root@portalA # locale

LANG=zh_CN.GBK

LC_CTYPE=”zh_CN.GBK”

LC_NUMERIC=”zh_CN.GBK”

LC_TIME=”zh_CN.GBK”

LC_COLLATE=”zh_CN.GBK”

LC_MONETARY=”zh_CN.GBK”

LC_MESSAGES=”zh_CN.GBK”

LC_ALL=

root@portalA # uname -a

SunOS portalA 5.10 Generic_120011-14 sun4u sparc SUNW,Sun-Fire-15000

root@portalA #

上中文出现乱码;

解决方法如下:

1、  前台传值的时间,对URL进行编码

2、  后台获取时,采用URLDecoder类进行解码而已

JavaScript 中的处理

function printImag(){

var url = “/JsjxzlpgAction.do?method=queryPrint&yxsh=”+”中文汉字”;

url=encodeURI(encodeURI(url));

window.open(url, ‘数据表’, “location=no,menubar=no,resizable=yes,

scrollbars=yes,status=yes,titlebar=no,toolbar=no”);

}

测试代码:

<html>

<body>

<script type=”text/javascript”>

var url=”/JsjxzlpgAction.do?method=queryPrint&yxsh=”+”中文汉字”;

document.write(encodeURI(url)+ “<br />”);

document.write(encodeURI(encodeURI(url))+”<br />”);

document.write(encodeURI(“,/?:@&=+$#”));

</script>

</body>

</html>

输出如下:

/JsjxzlpgAction.do?method=queryPrint&yxsh=%E4%B8%AD%E6%96%87%E6%B1%89%E5%AD%97
/JsjxzlpgAction.do?method=queryPrint&yxsh=%25E4%25B8%25AD%25E6%2596%2587%25E6%25B1%2589%25E5%25AD%2597
,/?:@&=+$#

encodeURI函数的再一次处理就是对特殊字符,例如%编码成%25

Java 中的处理

String yxsh =

java.net.URLDecoder.decode (request.getParameter(“yxsh”) , “UTF-8″);

使用Java

String str = “/JsjxzlpgAction.do?method=queryPrint&yxsh=” + “中文汉字”;

String encoding = “utf-8″;

String strEnc=java.net.URLEncoder.encode (str, encoding);

System.out .println(strEnc);

System.out .println(java.net.URLDecoder.decode (strEnc,encoding));

输出结果如下:

%2FJsjxzlpgAction.do%3Fmethod%3DqueryPrint%26yxsh%3D%E4%B8%AD%E6%96%87%E6%B1%89%E5%AD%97

/JsjxzlpgAction.do?method=queryPrint&yxsh=中文汉字

进一步测试:

String str2=”%E4%B8%AD%E6%96%87%E6%B1%89%E5%AD%97″;

System.out .println(java.net.URLDecoder.decode (str2,encoding));        str2=”%25E4%25B8%25AD%25E6%2596%2587%25E6%25B1%2589%25E5%25AD%2597″;

System.out .println(java.net.URLDecoder.decode (str2,encoding));

输出结果如下:

中文汉字

%E4%B8%AD%E6%96%87%E6%B1%89%E5%AD%97

可见java.net.URLDecoder.decode (str2,” utf-8”)的本质意义就是将%XX%XX的字符串表示按utf-8来进行解码。

当时冒似是在URL后面带上了这样的参数:

“parm=《%=java.net.URLEncoder.encode(parm,”utf-8″)%>”

然后在JAVA里取出来:

String mytext2 = java.net.URLDecoder.decode(request.getParameter(PARM), “utf-8″);

最终通过这种方式进行了处理。

主要是关注encodeURI函数和URLEncoder和URLDecoder类,来进行数据处理。

Reference

http://bbs.firnow.com/dview37t16452.html

http://hi.baidu.com/%B4%FA%CD%E9/blog/item/b195d554158ba45f574e005e.html

http://www.javaeye.com/topic/456553

http://yiminghe.javaeye.com/blog/243812

http://www.w3school.com.cn/js/jsref_encodeURI.asp

你可能感兴趣的:(中文编码)