Vm中一個超連結URL需要拼接中文作為Get請求的參數。如果直接拼接,傳到後台Action的參數物件後取出會是亂碼,需要編碼後再拼接到URL上。
解決方法是在Action中加入一個成員變量,保存編碼後的中文參數。在vm頁面渲染時取出這個變數值,再拼接超連結。
在這裡碰到的問題是:呼叫java.net.URLEncoder的encode()方法時,如果沒有顯示指定字元集參數,那麼URLEncoder會使用預設字元集。這個預設字元集在Eclipse裡跑main()方法和在Tomcat裡跑Web應用,得到的結果不一樣,所以影響了編碼的結果。
/**
* 將字串轉換為 x-www-form-urlencoded
;
* 格式。此方法使用平台預設編碼
*作為編碼方案來取得不安全字元的位元組。
*
* @param s String
;待翻譯。
* @deprecated 產生的字串可能會有所不同,取決於平台的
* 預設編碼。相反,使用encode(String,String)
* 方法來指定編碼。
* @return 翻譯後的String
。
** 🎜>@Deprecated
public static String encode(String s) {
String str = null;
try {
str = encode(s, dfltEncName);
} catch(UnsupportedEnco); {
// The system should always have theplatform default
}
return str;
}
方法的註解中也說明了不建議使用的原因是,這個encode(String)方法依賴平台字元集。