jsp與mysql中的中文字符亂碼問題


剛開始自學jsp,在練習的過程中遇到了一個很嚴重的問題,就是中文字符亂碼的問題,我用了三天的時間,搜集資料,終於解決了這個問題,現在對學到的東西進行一下總結整理。

1.首先是jsp頁面顯示亂碼的問題,<title></title>標簽中有中文有英文,設置<meta charset="utf-8" > 顯示亂碼,改為gbk則可正常顯示,其他頁面使用utf-8則顯示正常。最終發現是因為文件創建是用了不同的方法,一般情況下,用記事本編寫代碼,文件另存為*.html,保存類型選所有文件,編碼選UTF-8,之后再講文件后綴名改為.jsp,這樣創建最為穩妥。

參考http://www.blogjava.net/luedipiaofeng/articles/307666.html     

在jsp文件頭部應該這樣寫:

<%@ page language="java" pageEncoding="UTF-8"%>    jsp文件的存儲格式
<%@ page contentType="text/html;charset=UTF-8"%>      解碼格式,必須與存儲格式保持一致,不然<body></body>中的“你好”就會顯示亂碼
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">     控制瀏覽器的解碼方式
</head>
<body>

你好

</body>
</html>

2.現我有兩個文件,一個register.html和一個register.jsp,在register.html頁面中輸入注冊信息,傳遞給register.jsp文件,該文件將接收到的數據寫入到數據庫中。出現英文寫入正常,中文亂碼的情況。若中文部分全為???,則說明中文字符未能寫入數據庫,若為無法辨認的字符亂碼,證明中文寫入了數據庫只是編碼有問題。

當出現中文部分全為???或使用insert語句都無法寫入數據庫時,我重新創建了數據庫。

create database test DEFAULT CHARSET SET utf8 COLLATE utf8_general_ci;  (設置默認字符集,及數據庫校驗規則)

use test;

create table student(id int AUTO_INCREMENT primary key not null, name varchar(10) not null, password varchar(20) not null )ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;

show create table student;    顯示創建表的信息

show variables like 'character_set_%';         查看數據庫字符集

 

參考:http://www.2cto.com/database/201406/306012.html

我發現,在我將輸入數據從html傳入到jsp文件中時,就已經是亂碼了,這個亂碼是tomcat的內部編碼格式iso8859-1在搗亂,也就是說post提交時,如果沒有設置提交的編碼格式,則會以iso8859-1方式進行提交,(tomcat默認編碼:ISO8859-1)接受的jsp卻以utf-8的方式接受。導致亂碼。

有兩種方法可以解決該問題
1>.接受參數時進行編碼轉換   String name = new String(request.getParameter("uname").getBytes("ISO-8859-1"),"utf-8");   針對單個參數轉碼

2>.在jsp接受參數的代碼前加上  request.setCharacterEncoding("UTF-8");    針對所有參數轉碼

jsp接收到的參數終於可以正常顯示了。

 

3.String url ="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd+"&useUnicode=true&characterEncoding=UTF-8";   指定字符的編碼解碼格式,若mysql數據庫使用gbk編碼,項目數據庫使用的是utf-8編碼,在存數據時,數據庫會將項目數據用UTF-8格式將數據解碼成字節碼,然后再將解碼后的字節碼重新使用GBK編碼存放到數據庫中。在從數據庫中取數據時,數據庫會先將數據庫中的數據按GBK格式解碼成字節碼,然后再將解碼后的字節碼重新按UTF-8格式編碼數據,最后再將數據返回給客戶端。

 

 

參考:http://blog.csdn.net/centre10/article/details/5903924


免責聲明!

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



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