html 中文亂碼 HTML超鏈接中文亂碼問題分析及解決方法

字號:


    Vm中一個超鏈接URL需要拼接中文作為Get請求的參數(shù)。如果直接拼接,傳到后臺Action的參數(shù)對象中后取出會是亂碼,需要編碼后再拼接到URL上。
    解決方法是在Action中添加一個成員變量,保存編碼后的中文參數(shù)。在vm頁面渲染時取出這個變量值,再拼接超鏈接。
    在這里碰到的問題是:調(diào)用java.net.URLEncoder的encode()方法時,如果沒有顯示指定字符集參數(shù),那么URLEncoder會使用默認(rèn)字符集。這個默認(rèn)字符集在Eclipse里跑main()方法和在Tomcat里跑Web應(yīng)用,得到的結(jié)果不一樣,所以影響了編碼的結(jié)果。
    代碼如下:
    /**
    * Translates a string into <code>x-www-form-urlencoded</code>
    * format. This method uses the platform'sdefault encoding
    * as the encoding scheme to obtain thebytes for unsafe characters.
    *
    * @param s <code>String</code> to betranslated.
    * @deprecated The resulting string mayvary depending on the platform's
    * default encoding. Instead, use theencode(String,String)
    * method to specify the encoding.
    * @return the translated <code>String</code>.
    */
    @Deprecated
    public static String encode(String s) {
    String str = null;
    try {
    str = encode(s, dfltEncName);
    } catch(UnsupportedEncodingException e) {
    // The system should always have theplatform default
    }
    return str;
    }
    方法的注釋中也說明了不建議使用的原因是,這個encode(String)方法依賴于平臺字符集。