㈠ 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 get方式中文亂碼
get方式提交的參數編碼,只支持咐尺iso8859-1編碼。
因此,如果裡面有中文。
在衡灶高辯洞後台就需要轉換編碼,如下
String zhongwen = request.getParameter("zhongwen");
zhongwen = new String(zhongwen.getBytes("iso8859-1"),"GBK");
前提是你頁面編碼就是GBK,如果是utf-8,那上面那句代碼後面就改成utf-8
㈢ java中的編碼(好睏惑) 請教高手!
我看你還是不太明白一個問題
什麼是pageEncoding? ------指頁面編碼,當前整個也面的編碼方式。
request.getParameter() 是什麼 ,他指 傳遞參數的編碼,它和頁面編碼沒關系 ,
request.setCharacterEncoding(),response.setCharacterEncoding(),才是對傳遞參數設置的編碼。
String studentName=new String(request.getParameter("studentName").getBytes("ISO-8859-1"),"gb2312");
這是獲得 ISO-8859-1的位元組數組 通過gb2312解碼 ,這樣正常了
說明原先參數的編碼 是 ISO-8859-1 。
希望對你有所幫助 。
總結了下:3種最可能 產生亂嗎
java中,內部使用的是Unicode編碼
一 表單提交亂碼 :
1,get亂碼:
地址欄中傳中文亂碼的問題:需要設置tomcat , URIEncoding="utf-8"
或者
<%=new String(request.getParameter("name").getBytes("iso-8859-1"), "自己定")%>自己定要支持中文
2,post亂碼:
request.setCharacerEncoding("自己定")
或者
<%@page contentType="text/html;charset=utf-8"%>中的 charset=utf-8 是設置http的響應(response)中的編碼信息
二 頁面輸出中文時出現亂碼:response.setCharacterEncoding("utf-8」)
三 往資料庫寫入時出現亂碼 連接資料庫url上添加:useUnicode=true&characterEncoding=utf-8
另外不同的tomcat版本也許默認編碼不一樣 要做相應調整 。
最好的一個辦法就是 每個頁面都經過一個編碼過濾器filter .
pageEncoding我自己試了下,是也影響參數問題
等我找找他到底做什麼在給解釋,不大長用這個
主要還是自己學的不好。