JavaScript與Servlet的中文參數傳遞問題

當前端要將資料透過Http的方式將參數送往後端時
遇到中文字或是其他特殊字元常常會發生亂碼的問題
尤其是現在使用AJAX的頻率越來越高,這篇整理了我最後解決中文的方式


前端:JavaScript

在Javascript端有三種編碼的方式,讓中文或特殊字元可以正常的送至後端

方法一: escape()

不編碼的符號包括: @*/+
escape 不編碼 + (加號), 將使表單欄位資料中有空白的處理(用 + 連結字串)造成問題。且 escape 在處理非 ASCII 語系的字元會有問題。所以, 除非特例, 應盡量避免使用 escape()。

方法二: encodeURI()

不編碼符號包括: ~!@#$&*()=:/,;?+'
用 encodeURI() 會比使用 escape() 轉換 URI 正確。比較要注意的是這個方法不處理 ' (單引號)。

方法三: encodeURIComponent()

不編碼符號包括: ~!*()'
encodeURIComponent() 是適合大部分單一 URI 的編碼方法。這個方法通常可以正確的編出正確的編碼, 例如要編碼一段有 flash 的 html(參數有 & 符號), 如果用其他的方法, 大概解碼後 flash 也不能看了。比較要注意的是這個方法也不處理 ' (單引號)。

參考來源:http://diary.tw/march/category/Javascript

經過測試,在處理中文字時,方法二跟三都可以,方法一會出現問題

後端:Java Servlet


網路上找到最多的資料都是透過
java.net.URLEncoder.encode("轉碼文字","utf-8")與
java.net.URLDecoder.decode("轉碼文字","utf-8")來做編碼轉換

但是試過多種排列組合都無法成功

最後找到這個方式終於成功的將JavaScript編碼的資料轉回中文
String result = new String("轉碼文字".getBytes("ISO-8859-1"),"UTF-8");

總算把這問題解決了^^

0 意見: