Servlet相關的幾種中文亂碼問題


Servlet相關的幾種中文亂碼問題
瀏覽器調用jsp,html等頁面中文顯示亂碼
使得文件本身以utf-8字符集編輯保存

讓瀏覽器瀏覽器以utf-8字符集解析

在瀏覽器中右鍵選擇編碼格式為utf-8;

通過<meta>標簽模擬response頭,起到告訴瀏覽器用utf-8的編碼解析

具體操作:

//html
<meta name="content-type" content="text/html; charset=UTF-8">或<meta charset="utf-8">
//jsp
<%@ pageEncoding="utf-8"%>
//xml
<?xml encoding="UTF-8"?>
通過瀏覽器調用servlet,頁面顯示亂碼。
response亂碼問題

控制瀏覽器用UTF-8進行解碼

response.setContentType("text/html;charset=UTF-8"); 
//或者
response.setHeader("content-type","text/html;charset=utf-8");

//ps:setHeader是HttpServletResponse的方法。如果想在攔截器Filter中設置字符編碼,則無此方法,因為Filter的doFilter方法的參數類型是ServletResponse
將response對象中的數據以UTF-8解碼后的字節流發向瀏覽器

response.setCharacterEncoding("UTF-8");
request亂碼問題

post請求亂碼

resquest.setCharacterEncoding("頁面使用的字符集"); //只對post請求有效
GET請求(URL方式傳遞參數亂碼)

原因:

//問題本質是get方式傳遞的參數內容默認編碼方式問ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也無法解決問題。

解決方法一:

修改tomcat服務器的配置文件,即修改tomcat目錄下的conf/server.xml文件。

<Connector port="8080" protocol="HTTP/1.1"

    maxThreads="150"   connectionTimeout="200000"

    redirecPort="8443"    <!-URIEncoding="utf-8"-> /> //注釋為需要添加的部分
解決方法二:

在servlet中手動轉換字符集並轉換(不建議使用)。

//對應Servlet中:
String name = request.getParameter("name");
String value = null;
value = new String(name.getBytes("ISO-8859-1"),"頁面使用的字符集");
調用數據庫出現亂碼
修改數據庫字符集或表字符集

#sql語句
show create table 表名; #查詢表的信息(主要看字符集)
   /*例:Table Create Table
Dog CREATE TABLE `dog` (
`dog_id` int(11) NOT NULL AUTO_INCREMENT,
......
PRIMARY KEY (`dog_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8*/
#修改完數據庫字符集,需要重啟mysql數據庫
ALTER DATABASE 數據庫名 CHARACTER SET utf8;
  #修改表字符集
ALTER TABLE 表名 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM