『壹』 java https請求 中文亂碼問題
嘗試的方法:
1. 在服務端接收到參數時,utf-8轉gbk,無效。
2. 在服務端接收到參數時,iso-8859-1轉gbk,無效。
3. 在發送請求前將中文參數轉碼,utf-8轉iso-8859-1,無效。代碼如下:
new String(remark.getBytes(「UTF-8」), 「ISO-8859-1」)
4. 在請求端,HttpHeader設定ContentType為「application/json;UTF-8」,無效。代碼如下:
headers.setContentType(Media.valueOf(「application/json;UTF-8」));
寫到這里,有人應該感覺到這有點「病急亂投醫」的感覺了,沒有頭緒地在試著各種方式。是的,起初我覺得是請求header中採用了ISO-8859-1的編碼,但嘗試後很顯然不是;後來我覺著是否是RestTemplate中採用的HttpMessageConverter方式所決定的,但沒能找到很好的證明方式,查資料說的是StringHttpMessageConverter默認採用的是ISO-8859-1編碼,可我覺得我指定了ContentType為application/json,RestTemplate不應該去調用StringHttpMessageConverter啊,其中的原理還有待深究。個人感覺這種情況出問題的可能性最大。
最後,在網上看到一篇文章後,看了一種建議方式,並且是可行的,就是使用URLEncode,將中文參數在傳參前進行encode.這里以GBK編碼是為了在伺服器端接收參數後無需再轉碼了,如下:
list.add(URLEncode.encode(name, 「GBK」));
URLEncode方式可以解決這種特定場景的中文亂碼問題,相信理解其原理後還可以運用到更多的場景。目前我在網上看到的,關於用URLEncode處理中文亂碼最多的場景就是文件下載時中文文件名亂碼。
『貳』 java HttpPost傳入參數中文亂碼
以上的2個方法最好都要用上 過濾器只能解決POST請求 ,要處理GET請求就要用
bytes = string.getBytes("iso-8859-1") 得到原始的位元組串,再用 string = new String(bytes, "GB2312") 重新得到正確的字元串 。
這個方法,所以最好2個都要寫,這樣不管是POST還是GET請求就都能解決了。
『叄』 java中頁面傳值中文亂碼
js請求的對好方法是進行兩次編碼
enkey
=
encodeURI(encodeURI(key));
然後在服務端解碼一次,就不會出現亂碼了
當然編碼和解碼的字元集要一致,由於JavaScript是用utf-8所以解碼時也應用utf-8
『肆』 jsp向java後台傳遞參數亂碼
首先jsp頁面編碼要統一 建議都使用 utf-8
傳值得話 如果是 post 後台第一句加 request.setCharacterEncoding("UTF-8")
get 的話就是
String parm=new String(request.getParameter("parm").getBytes("ISO-88591"),"UTF-8");
javascript 傳
window.location.href =" xxx.jsp ? parm="+ encodeURI('中文');
後台在 String parm = java.net.URLEncoder.encode( request.getParameter("parm"), "utf-8 ")
『伍』 在java中,我向jsp頁面傳遞數組值的時候出現中文亂碼。
按位元組轉換慎用,95%的亂碼這樣是解決不了的
首先要確認java 中取到數據是否亂碼?有些時候是資料庫到 java 就亂碼了。
然後直接在 頁面alert 你的結果,盡量不走任何方法。看看是否是界面上的js導致的亂碼?早期的ext、jquery都有自以為是轉碼的毛病
另外提一點,你放在數組里是怎麼傳到前台的,別說你把數組直接傳遞了。那相當於 str.toString()
返回的可能是數據類型而不是你要的值。