【Java】程式設計過程中遇到的中文編碼問題

丹俠啊GODOG發表於2017-07-20

前言

在使用中文輸入或輸出的時候,我們經常會遇到亂碼的情況,需要進行轉碼才能解決這個問題,下面是我在程式設計過程中遇到的一些關於中文亂碼的情況以及解決方法。

一、在使用Servlet向瀏覽器輸出中文時,顯示亂碼

解決方法:
在方法體的最前面加上兩個轉碼函式:

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

二、在進行表單提交獲取資料時,中文亂碼

儘管在最前面加了

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

但還是顯示
這裡寫圖片描述
於是用了

new String(req.getParameter("UserName").getBytes("utf-8"));

此時顯示的是:
這裡寫圖片描述
最後是用new String(req.getParameter("UserName").getBytes("iso-8859-1"),"utf-8");解決的:
這裡寫圖片描述
那為什麼通過URL傳遞中文引數會出現亂碼呢?
原因:Http請求傳輸時將url以ISO-8859-1編碼,伺服器收到位元組流後預設會以ISO-8859-1編碼來解碼成字元流(造成中文亂碼)。
解決辦法:我們需要把request.getParameter(“引數名”)獲取到的字串先用ISO-8859-1編碼成位元組流,然後再將其用utf-8解碼成字元流。

三、HttpPost 傳遞引數中文亂碼

要事先在StringEntity上寫好轉碼。如下圖程式碼:
這裡寫圖片描述

相關文章