當前端要將資料透過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");
總算把這問題解決了^^
遇到中文字或是其他特殊字元常常會發生亂碼的問題
尤其是現在使用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");
總算把這問題解決了^^