Solaris上中文請求亂碼

comeontony發表於2011-12-06

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

相關文章