關於Java控制檯輸入輸出亂碼問題

原文鏈接http://hioies.iteye.com/blog/1392571 

今天在研究某個開源項目時,有如下代碼: 
Java代碼  收藏代碼
  1. BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));  
  2. String message;  
  3. while((message = reader.readLine()) != null){  
  4.     System.out.println(message);  
  5. }  


這是很常見的獲取鍵盤輸入的一段Java代碼,但在運行過程中,我發現只要我輸入的是中文,而且字符數爲奇數,就會出現最後一個字符爲亂碼的問題,花了一下午的時間找問題,查原因,最後一篇文章幫我找到了原因: 

產生原因:因爲這個開源項目的默認字符編碼爲UTF-8,所以我的控制檯的字符編碼也自動變成了UTF-8,而鍵盤的輸入流的默認格式是GBK格式,這樣就造成了在GBK轉UTF-8的過程中產生的奇數亂碼錯誤(這個問題的解釋可以在搜索引擎找到)。 

解決辦法: 
1.在代碼區域右鍵 -> run as -> run configurations -> common(右側) -> console encoding 
如果出現此錯誤,此時的編碼格式應該是UTF-8,選擇Other,這時可能沒有GBK選項,如果沒有,則執行之後操作。 

2.更改該項目的文本文件編碼,項目右鍵 -> properties -> resource -> 先將 text file encoding調整回GBK,然後再回去重新設置console encoding編碼爲GBK。 

現在很多項目要求在項目開始之前統一字符編碼爲UTF-8,這是爲了更好的支持國際化,這無可避免得可能會出現控制檯亂碼這類比較偏門的問題(最少我查了挺久的),所以寫出來給大家分享一下~ 
/---------------------分割線,20150529添加--------------------------------------
當在jsp頁面採用<a href="xxxxx?page=<%=filename%>"></a>這種方式提交,相當於用get方式提交。
get方式提交的參數編碼,只支持iso8859-1編碼。
因此,如果裏面有中文。
在後臺就需要轉換編碼,如下
String zhongwen = request.getParameter("zhongwen");
zhongwen = new String(zhongwen.getBytes("iso8859-1"),"GBK");
前提是你頁面編碼就是GBK,如果是utf-8,那上面那句代碼後面就改成utf-8

發佈了43 篇原創文章 · 獲贊 12 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章