中文亂碼問題解決和原理
- 2019 年 10 月 30 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/luo4105/article/details/53915233
產生亂碼的原因主要是兩端編碼/解碼不一致問題 1.前台頁面的編碼格式和後台程式碼的編碼格式不一致,現在一般統一使用utf-8這種編碼格式 就需要將前台jsp編碼指定為utf-8
<%@page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8" %>
後台的接收的編碼格式為項目的編碼格式,可以在開發工具中將編碼格式改為utf-8
2.form表單提交方式為get,或url傳參漢字亂碼
原因: 在get提交時,參數和數據會以name/value由&分開,url的編碼是ASCII碼前面加上% 漢字及一些特殊符號無法轉成ASCII碼,它們會被瀏覽器轉化成iso-8859-1的編碼格式 這時有以下解決方式 a.用程式碼在後台接收時轉碼一下,將iso-8859-1碼的數據轉成需要的編碼格式(如utf-8)
String param = request.getParameter("zhongwen"); param = new String(param.getBytes("iso8859-1"),"utf-8");
b.將伺服器的接收格式修改一下,比如將tomcat的接收格式改為iso8859-1 在server.xml文件中,修改以下程式碼
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
c.將form表單提交方式變為post方式,即添加method="post"
post提交不亂碼的原理
對於POST方式,表單中的參數值對是通過request包發送給伺服器,此時瀏覽器會根據網頁的ContentType("text/html; charset=UTF-8")中指定的編碼進行對錶單中的數據進行編碼,然後發給伺服器。 由於往往前台編碼和後台編碼設置一致,所以我們可以在伺服器端的程式中我們可以通過request.getParameter(java)獲得正確的數據。 參考資料 [1].http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html [2].http://blog.csdn.net/lfsf802/article/details/7232834