1、解決接口GET請求中:參數包含中文問題?
通過URLEncoder.encode 可以解決。我此次使用的utf-8編碼,所以對中文進行urlencode 編碼 而在服務器短 使用的tomcat 是不需要進行解碼的;
同時,若是web容器也是不需要進行解碼的;實際是容器已經進行了解碼。但這個時候就會有一個問題,但是我沒有進行驗證:如果使用gbk 傳輸的中文,到服務器端,必須的進行程序解碼;舉例如下
網頁提交字符串:
當頁面中的表單提交字符串時,首先把字符串按照當前頁面的編碼,轉化成字節串。然后再將每個字節轉化成 "%XX" 的格式提交到 Web 服務器。比如,一個編碼為 GB2312 的頁面,提交 "中" 這個字符串時,提交給服務器的內容為 "%D6%D0"。
在服務器端,Web 服務器把收到的 "%D6%D0" 轉化成 [0xD6, 0xD0] 兩個字節,然后再根據 GB2312 編碼規則得到 "中" 字。
在 Tomcat 服務器中,request.getParameter() 得到亂碼時,常常是因為前面提到的服務器端未解碼造成的。默認情況下,當提交 "%D6%D0" 給 Tomcat 服務器時,request.getParameter() 將返回 [0x00D6, 0x00D0] 兩個 UNICODE 字符,而不是返回一個 "中" 字符。因此,我們需要使用 bytes = string.getBytes("iso-8859-1") 得到原始的字節串,再用 string = new String(bytes, "GB2312") 重新得到正確的字符串 "中。
我理解的是只有客戶端和服務端口不一致編碼的時候,客戶端有使用了urlencode進行了編碼, 服務端不進行解碼 才會出現亂碼; 但是如果兩端約定使用的都是一一致的編碼 ,那應該不存在這種問題。一會驗證了這個問題了,在過來更新!
詳情參考鏈接: http://www.iteye.com/problems/56952