key words: 腳本編碼 中文亂碼 js
在jsp中,通過(guò)js訪問java代碼比較容易(不過(guò),也有缺陷,比如java代碼的聲明必須先于js),反過(guò)來(lái)則不方便,網(wǎng)上看到有通過(guò)其他組件的方式來(lái)做,感覺也不是很好,其實(shí)平時(shí)用的更多的是在js中有中文編碼,而需要到下一個(gè)jsp頁(yè)面中得到這個(gè)對(duì)應(yīng)的值。
js中有函數(shù)escape和unescape,可惜的是java.net.*中的編碼和解碼與js的不一致,所以他們不能協(xié)同工作,有一個(gè)方法就是在java中重新實(shí)現(xiàn)一遍js里對(duì)應(yīng)的方法,代碼如下:
/**
?*?java版本的escape和?unescape[對(duì)應(yīng)javaScript里的函數(shù)]
?*/
public?class?EscapeUnescape?{
????/**
?????*?escape?==>?escape
?????*?@param?src
?????*?@return?String
?????*/
????public?static?String?escape(String?src)?{
????????int?i;
????????char?j;
????????StringBuffer?tmp?=?new?StringBuffer();
????????tmp.ensureCapacity(src.length()?*?6);
????????for?(i?=?0;?i?<?src.length();?i++)?{
????????????j?=?src.charAt(i);
????????????if?(Character.isDigit(j)?||?Character.isLowerCase(j)
????????????????????||?Character.isUpperCase(j))
????????????????tmp.append(j);
????????????else?if?(j?<?256)?{
????????????????tmp.append("%");
????????????????if?(j?<?16)
????????????????????tmp.append("0");
????????????????tmp.append(Integer.toString(j,?16));
????????????}?else?{
????????????????tmp.append("%u");
????????????????tmp.append(Integer.toString(j,?16));
????????????}
????????}
????????return?tmp.toString();
????}
????/**
?????*?unescape?===>js
?????*?@param?src
?????*?@return?String
?????*/
????public?static?String?unescape(String?src)?{
????????StringBuffer?tmp?=?new?StringBuffer();
????????tmp.ensureCapacity(src.length());
????????int?lastPos?=?0,?pos?=?0;
????????char?ch;
????????while?(lastPos?<?src.length())?{
????????????pos?=?src.indexOf("%",?lastPos);
????????????if?(pos?==?lastPos)?{
????????????????if?(src.charAt(pos?+?1)?==?'u')?{
????????????????????ch?=?(char)?Integer.parseInt(src.substring(pos?+?2,?pos?+?6),?16);
????????????????????tmp.append(ch);
????????????????????lastPos?=?pos?+?6;
????????????????}?else?{
????????????????????ch?=?(char)?Integer.parseInt(src.substring(pos?+?1,?pos?+?3),?16);
????????????????????tmp.append(ch);
????????????????????lastPos?=?pos?+?3;
????????????????}
????????????}?else?{
????????????????if?(pos?==?-1)?{
????????????????????tmp.append(src.substring(lastPos));
????????????????????lastPos?=?src.length();
????????????????}?else?{
????????????????????tmp.append(src.substring(lastPos,?pos));
????????????????????lastPos?=?pos;
????????????????}
????????????}
????????}
????????return?tmp.toString();
????}
}