距離上次做項目已經有快兩個月了,一直沒有將問題做一個總結。趁著天寒地洞萬物凋零的季節將自己的心得發出來,以促後學。
毫無疑問,無論程式開發還是網站開發,最糾結的問題就是亂碼了。我深有體會,深受其害。不過經過徹底反思和高人指點,終於解決了這個棘手的問題。分享一下。
在開發過程中很多環節都會出現亂碼,比如前台頁面(網站開發案例)向servlet提交資料的環節需要設定編碼方式,servlet接收時同樣需要設定,servlet直接向前台輸出時要設定,串連資料庫時要設定,建立資料庫時也要設定,在mysql的命令列查詢表中資訊時有時也會有亂碼,這時也需要做處理。現在就這些問題將我在我的網站項目中的處理方法展示一下。
1.將jsp頁面中的要將網頁的編碼方式設為UTF-8.當然gb2312或者GBK也是可以的,而且後二者可以實現中文編碼,或許這樣的資料插入資料庫不會再查詢時出現亂碼。無論怎樣,先確定一種編碼方案然後各個地方的編碼設定都要和這個地方的一致。My Code是這樣的:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2.在背景servlet類中要將dopost方法中接受前台參數的編碼方式設為UTF-8。如:req.setCharacterEncoding("UTF-8");當然如果需要用servlet來產生網頁,那麼一定要設定產生網頁的編碼方案:resp.setContentType("text/html;charset=UTF-8")。
3.在寫串連資料庫那個工具類時也要寫上編碼方式:String url="jdbc:mysql://117.0.0.1/xiaohuier88040?user=xiaohuier88040&password=xiaohuier88040&useUnicode=true&charactorEncoding=utf8".至於為什麼要這麼寫,後面會做持續的介紹。注意這裡的編碼方式utf8之間已經沒有杠杠了,如果有杠杠的話是不能被是別的。
至此,關於編碼過程中的處理亂碼的設定已經結束了。需要說明的是在這樣的設定下存進資料庫的資料時按照utf-8的編碼規範進行的編碼,但是utf-8是不能支援中文的。所以在Mysql的命令提示行裡查詢到的中文資訊都是亂碼。這時需要在查詢語句前執行 set NAMES=gbk;然後再執行查詢語句,你就可以看到可愛的中文了。
有些無關編碼方式的小細節也是需要注意的。比如我在進行資料插入時沒有將string類型的資料加上單引號,結果出現了中文死活插入不成功的情況,我錯以為是編碼的問題。於是我絞盡腦汁費盡心肝地尋找關於編碼的問題,終於還是沒有解決。最後還是在網上一位前輩的提示下發現了這個問題。真是不該啊,之前還解決過這洋的問題。粗心害死貓啊。
以後幾個篇章我會對問什麼做這樣的設定和編碼的原理和大家探討。持續關注。