一、servlet輸出亂碼
1. 用servlet.getoutstream位元組流輸出中文,假設要輸出的是string str ="釣魚島是中國的,無恥才是日本的"。
1.1 若是本地伺服器與本地客戶端這種就不用說了,直接可以out.write(str.getbytes())可以輸出沒有問題。因為伺服器中用str.getbytes()是採用預設本地的編碼,比如gbk。而瀏覽器也解析時也用本地預設編碼,兩者是統一的,所以沒有問題。
1.1 若伺服器輸出時用了, out.write(str.getbytes("utf-8"))。而本地預設編碼是gbk時(比例在中國),那麼用瀏覽器開啟時就會亂碼。因為伺服器傳送過來的是utf-8的1010資料,而客戶端瀏覽器用了gbk來解碼,兩者編碼不統一,肯定是亂碼。當然,你也可以自己將客戶端瀏覽器的編碼手工呼叫下(ie選單是:查詢view->編碼encoding->utf-8),但是這種操作很爛,最好由伺服器輸出響應頭告訴,瀏覽器用哪種編碼來解碼。所以要在伺服器的servlet中,增加response.setheader("content-type","text/html;charset=utf-8"),當然也可直接用簡單的response.setcontenttype("text/hmtl;charset=utf-8")。兩種的操作是一樣一樣的。
2. 用servlet.getwirter字元流輸出中文,假設要輸出的是string str ="釣魚島是中國的,無恥才是日本的"。
2.1 若寫成out.print(str)輸出時,客戶端瀏覽器顯示的將全是多個?????的字元,代表在編碼表中肯定就找不到相應的字元來顯示。原因是:servlet.getwriter()得到的字元輸出流,預設對字元的輸出是採用iso-8859-1,而iso-8859-1肯定是不支援中文的。所以肯定要首先要做的第一件事:是要將伺服器物件輸出字元能支援中文的。其次伺服器向客戶端寫回的響應頭要告訴客戶端是用了哪種編碼表進行編碼的。而實現這兩個需求,只需要response.setcontenttype("text/hmtl;charset=utf-8")。就搞定了。特別注意:response.setcontenttype("text/html;charset=utf-8")要放在printout out = response.getwriter()**的前面,否則只是有告訴客戶端用什麼碼表編碼的功能,而伺服器端還是用iso-8859-1編碼了。再特別提示下:在同一servlet中的doget或dopost方法中,不能既用response.getoutputstream又用response.getwriter,因為這兩種response的響應輸出位元組流與字元流是衝突的,只能用其一。
三、servlet的response增加addcookie,cookie中value的中文碼問題解決方法。
關於cookie的原理,見
若想將cookie中存放中文的值,必須用base64編碼後,發給客戶瀏覽器端進入儲存。而下次客戶端瀏覽訪問是帶回來的cookie中的值,是經過base64編碼的,所以需要用base64解碼即可。 base64編碼主要是解決將特殊字元進行重新編碼,編碼成a-b、a-b、0-9、+與/,字元52,10個數字與乙個+,乙個/ 共64個字元。它的原理是將原來3個位元組的內容編碼成4個位元組。主要是取位元組的6位後,在前面補00組成乙個新的位元組。所以這樣原來的3個位元組共24,被編碼成4個位元組32位了。
具體**示例如下:
四、獲取請求引數亂碼
get方式的亂碼:
如」/demo5/servlet/rd2?name=中國」>cn
,直接用request.getparameter得到的字串strcn將會亂碼,這也是因為get方式是用http的url傳過來的預設用iso-8859-1編碼的,所以首先得到的strcn要再用iso-8859-1編碼得到原文後,再進行用utf-8(看具體頁面的charset是什麼utf-8或gbk)進行解碼即可。new string(strcn.getbytes(「
iso-8859-1」),
「utf-8」);
這種方式操作比較麻煩的是,有乙個引數要用iso-8859-1編碼一次再解碼一次。
post方式的亂碼:只需要request.setcharacterencoding("utf-8"):即可。
中文亂碼解決方案
前言 亂碼問題,一直使我們頭疼的問題。今天自己有空好好研究一番。不求太深入,只求只知皮毛。考慮不夠全面,只求給您一點幫助足矣。一 簡單介紹下pageencoding與contenttype的區別 摘自網上 pageencoding 設定jsp原始檔和響應正文中的字符集編碼。contenttype 設...
各種中文亂碼解決辦法
在程式設計的時候會遇到各種中文亂碼,這裡進行統計以便以後查閱 1 前端頁面元素中文亂碼 會出現下面亂碼 頁面上的元素也就是html內的元素,是中文的會出現亂碼,而從後台獲取的中文不會出現亂碼。解決方法 頁面上設定編碼方式為utf 8 2 url傳參 get方式傳參出現中文亂碼,如下出現這種情況,要先...
QT各種亂碼解決方案
qt中的中文顯示,經常會出現亂碼,但在ui設計介面上新增的中文是不會出現亂碼的,如果你剛使用qt,那麼你肯定會碰到這個問題。網上搜尋一下,找到的都是這種 include qtextcodec int main int argc,char argv qt5中,一些函式已經被取消了,而且網上很多都是不推...