解決中文亂碼問題1. 字符集
1) 字符(Character)是各種文字和符号的總稱,包括各個國家文字、标點符号、圖形符号、數字等。字符集(Character set)是多個字符的集合。
2) 任何數據在計算機内部實際上都是以二進制的形式保存的,所以我們看得見的字符本質上都是以二進制的形式保存的。而字符集實際上就是看得見的字符和二進制數之間的一張對應表。
2. 編碼與解碼1) 編碼:将字符轉換為二進制數
'中' → E4B8AD → 1110 0100-1011 1000-1010 1101
2) 解碼:将二進制數轉換為字符
1110 0100-1011 1000-1010 1101 → E4B8AD → '中'
3) 亂碼:編碼與解碼使用的字符集不一緻就會産生亂碼。
如下圖:使用 utf-8 編碼,使用GBK 解碼
所以,解決亂碼問題的根本方法就是統一編碼和解碼的字符集。
3. 在Web應用中統一字符集1) 請求參數中含有中文
· 請求由浏覽器發送給服務器
· 由浏覽器編碼
· 浏覽器使用HTML頁面指定的字符集編碼,隻需要将HTML頁面的字符集指定為UTF-8即可
· 由服務器解碼
· 默認字符集是IOS-8859-1
· 解決方案
· 對于POST請求:post請求在Servlet中解碼,默認的字符集是ISO-8859-1,不支持中文,所以我們需要修改Servlet的字符集為UTF-8。使用request.setCharacterEncoding("UTF-8");設置request對象使用UTF-8字符集對請求體中的内容進行解碼。但需要注意的是,這個操作一定要在調用getParameter()方法之前進行。
· 對于GET請求:GET請求是在URL地址欄中傳遞請求參數的,它會被Tomcat服務器自動解碼,而Tomcat服務器默認的字符集也是ISO-8859-1,
所以我們需要修改Tomcat服務器的字符集為UTF-8。由于請求參數是包含在請求行内的,無法通過request對象進行設置,所以需要在Server.xml文件中修改Connector标簽,添加URIEncoding="utf-8"屬性。
在eclipse中的Tomcat鏡像中修改即可生效。但如果将來删除當前Tomcat鏡像,重新關聯Tomcat,則會使設置失效,所以在Tomcat配置文件中最好也進行配置。
2) 服務器響應中含有中文
· 響應由服務器發送給浏覽器
· 由服務器編碼
· 默認使用ISO-8859-1進行編碼
· 由浏覽器解碼
· 默認使用GBK進行解碼
· 解決方案
· 方法1:設置響應頭
response.setHeader("Content-Type","text/html;charset=utf-8");
· 方法2:設置響應的内容類型
response.setContentType("text/html;charset=utf-8");
· 通過這種方式可以在響應頭中告訴浏覽器響應體的編碼方式是UTF-8;同時服務器也會采用該字符集進行編碼
但需要注意的是,兩種方法一定要在response.getWriter()之前進行。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!