亂碼,亂碼,頭大,煩,話說設定Tomcat後可以解決,但有的時候不管用了,這時,我們可以考慮轉碼方式不直接傳中文,在js裡用escape轉碼,記得需要用兩次,如:
var str=escape("這是中文參數");
str=escape(str);
xxx.do?name=str;
在後台透過一個類別的方法再轉回來:
Escape.unescape(request.getParameter("name"));
Escape類別如下:
パッケージ com.laneasy.hy.util;
/**
* js エンコーディングおよびトランスコーディング Java 実装クラス
*
* @author yangjinde
*/
public class Escape {
/**定数の 16 進数。*/
private Final static String[] hex = { "00" 、「01」、「02」、「03」、「04」、「05」、
「06」、「07」、「08」、「09」、「0A」、「0B」、「0C」 "、"0D"、"0E"、"0F"、"10"、
"11"、"12"、"13"、"14"、"15"、"16"、"17"、" 18"、"19"、"1A"、"1B"、
"1C"、"1D"、"1E"、"1F"、"20"、"21"、"22"、"23"、 「24」、「25」、「26」、
「27」、「28」、「29」、「2A」、「2B」、「2C」、「2D」、「2E」、「2F」 、「30」、「31」、
「32」、「33」、「34」、「35」、「36」、「37」、「38」、「39」、「3A」、「3B」 "、"3C"、
"3D"、"3E"、"3F"、"40"、"41"、"42"、"43"、"44"、"45"、"46"、" 47"、
"48"、"49"、"4A"、"4B"、"4C"、"4D"、"4E"、"4F"、"50"、"51"、"52"、
「53」、「54」、「55」、「56」、「57」、「58」、「59」、「5A」、「5B」、「5C」、「5D」、
「5E」、「5F」、「60」、「61」、「62」、「63」、「64」、「65」、「66」、「67」、「68」、
「69」 、「6A」、「6B」、「6C」、「6D」、「6E」、「6F」、「70」、「71」、「72」、「73」、
「74」、「75」 "、"76"、"77"、"78"、"79"、"7A"、"7B"、"7C"、"7D"、"7E"、
"7F"、"80"、" 81"、"82"、"83"、"84"、"85"、"86"、"87"、"88"、"89"、
"8A"、"8B"、"8C"、 「8D」、「8E」、「8F」、「90」、「91」、「92」、「93」、「94」、
「95」、「96」、「97」、「98」 、「99」、「9A」、「9B」、「9C」、「9D」、「9E」、「9F」、
「A0」、「A1」、「A2」、「A3」、「A4」 "、"A5"、"A6"、"A7"、"A8"、"A9"、"AA"、
"AB"、"AC"、"AD"、"AE"、"AF"、" B0"、"B1"、"B2"、"B3"、"B4"、"B5"、
"B6"、"B7"、"B8"、"B9"、"BA"、"BB"、 「BC」、「BD」、「BE」、「BF」、「C0」、
「C1」、「C2」、「C3」、「C4」、「C5」、「C6」、「C7」 、「C8」、「C9」、「CA」、「CB」、
「CC」、「CD」、「CE」、「CF」、「D0」、「D1」、「D2」、「D3」 "、"D4"、"D5"、"D6"、
"D7"、"D8"、"D9"、"DA"、"DB"、"DC"、"DD"、"DE"、" DF"、"E0"、"E1"、
"E2"、"E3"、"E4"、"E5"、"E6"、"E7"、"E8"、"E9"、"EA"、 「EB」、「EC」、
「ED」、「EE」、「EF」、「F0」、「F1」、「F2」、「F3」、「F4」、「F5」、「F6」 、"F7"、
"F8"、"F9"、"FA"、"FB"、"FC"、"FD"、"FE"、"FF" };
/**定数 val.*/
private Final static byte[] val = { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
0x3F, 0x3F, 0x3F, 0x3F, 0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x00、0x01、
0x02、 03、0x04、0x05、0x06 、0x07、0x08、0x09、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x0A、0x0B、0x0C、0x0D、0x0E、0x0F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x0A、0x0B 、0x0C、0x0D、0x0E、0x0F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、0x3F、
0x3F、 3F、0x3F、0x3F、0x3F 、0x3F、0x3F、0x3F };
/**
* 逃げる。
*
* @param s
* s
*
* @return 文字列
*/
/**
* エンコード
*
* @param s
* @return
*/
public static String escape(String s) {
if (s != null) {
StringBuffer sbuf = new StringBuffer();
int len = s.length();
for (int i = 0; i int ch = s.charAt(i);
if ('A' sbuf.append((char) ch);
} else if ('a' sbuf.append((char) ch);
} else if ('0' sbuf.append((char) ch);
} else if (ch == '-' || ch == '_' || ch == '.' || ch == '!'
|| ch == '~' || ch == '*' || ch == ''' || ch == '('
|| ch == ')') {
sbuf.append((char) ch);
} else if (ch sbuf.append('%');
sbuf.append(hex[ch]);
} else {
sbuf.append('%');
sbuf.append('u');
sbuf.append(hex[(ch >>> 8)]);
sbuf.append(hex[(0x00FF & ch)]);
}
}
return sbuf.toString();
}
null を返します。
}
/**
* 逃脫。
*
* @param s
* s
*
* @return 字串
*/
/**
* 解碼 說明:本方法保證 不論參數s是否經過escape()編碼,均能得到正確的「解碼」結果
*
* @param s
* @return
*/
public static String unescape(String s) {
if (s != null) {
StringBuffer sbuf = new StringBuffer();
int i = 0;
int len = s.length();
while (i int ch = s.charAt(i);
if ('A' sbuf.append((char) ch);
} else if ('a' sbuf.append((char) ch);
} else if ('0' sbuf.append((char) ch);
} else if (ch == '-' || ch == '_' || ch == '.' || ch == '!'
|| ch == '~' || ch == '*' || ch == ''' || ch == '('
|| ch == ')') {
sbuf.append((char) ch);
} else if (ch == '%') {
int cint = 0;
if ('u' != s.charAt(i 1)) {
cint = (cint cint = (cint i = 2;
} else {
cint = (cint cint = (cint cint = (cint cint = (cint i = 5;
}
sbuf.append((char) cint);
} else {
sbuf.append((char) ch);
}
我;
}
return sbuf.toString();
}
回空;
}
}