日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tomcat编码配置gbk_Tomcat中的编码问题

發布時間:2023/12/9 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tomcat编码配置gbk_Tomcat中的编码问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近又碰到了中文亂碼問題,這里我沒有把數據庫牽扯進來,先說下我的環境,servlet容器使用Tomcat6.0,瀏覽器FireFox3.0、IE6,涉及字符編碼設置的地方我的思路就是編碼的地方都統一使用UTF-8,具體配置如下:

1.所有頁面的charset設置為UTF-8。

2.Tomcat的URIEncoding默認是ISO-8859-1,而我設置為UTF-8,主要是想解決中文命名的文件以及請求以get方式提交有可能出現的亂碼問題。

3.添加過濾器,調用request.setCharacterEncoding("utf-8")方法將request的字符集設定為utf-8,解決請求以post方式提交的亂碼問題。

其實這樣的設置貌似是不會再出現亂碼問題了,不過,問題依舊來了

?,如果我在瀏覽器的地址欄中輸入中文參數提交,返回的頁面卻出現了亂碼。真搞不明白到底是哪里出了問題!說起來對中文亂碼的問題一直是一支半解,出現亂碼了,網上搜羅了一大堆資料,按照網上的配置,問題到是解決了,不過原理卻搞的很模糊,一個請求發送到服務器,服務器業務邏輯處理后返回一個頁面,這中間涉及的字符集轉換,編碼,解碼過程一概不清楚。這次,折騰了半天,總算是更進一步了解了字符編碼問題,這里做個總結。

先看我的總結,有不對的地方歡迎批評。

首先我們看下,一個請求響應的流程

瀏覽器 IE/FireFox

----------->Servlet容器------------------------>顯示頁面

編碼?使用容器的URIEncoding轉碼

解碼

我把用戶發送請求方式不同引起的中文問題劃分了四種類型:

1、表單的get提交

2、表單的post提交

3、頁面鏈接傳遞中文參數

4、地址欄中參數直接輸入中文提交

1.首先我們看表單get方式提交

瀏覽器根據頁面的charset編碼方式對頁面進行編碼,然后提交至服務器,首先進入對應的字符編碼過濾器(如果有的話),不過Tomcat6.0對于get提交方式采用的是server.xml文件中的URIEncoding編碼方式,而并不會采用過濾器中設置的編碼,那么根據我的環境設置,jsp頁面都使用UTF-8的編碼,Servlet容器的URIEncoding也設置為UTF-8,則servlet不用進行轉碼即可正確解碼,獲得正常的中文字符串。那么,響應頁面的中文因為頁面的統一編碼(UTF-8)自然也會正常顯示。當然,如果我們Tomcat的URIEncoding設置為其他非UTF-8的編碼方式時,頁面的內容進入Tomcat解析時,因為Tomcat和頁面的編碼不統一,就需要轉碼。例如,如果我們采用Tomcat默認的ISO-8859-1,那么當我們使用request.getParameter("yourVariable?")獲取表單參數值時其實Servlet就進行了轉碼,方式為UTF-8-->ISO-58859-1(我的頁面charset都是UTF-8),類似于這樣

Java代碼?

newString(變量值.getBytes("UTF-8"),"ISO-8859-1");

例如表單的username屬性以字符串"編輯"提交,那么進入容器后,FormBean中的這個變量會亂碼,request.getParameter(username)一樣的效果,s1就是request返回的結果,下面是內存快照。

不過即使這樣,我們依然可以使用不恰當的方法顯示正常的中文,即逆向轉碼,例如上面的亂碼,我們可以通過ISO8859-1-->UTF-8這種方式還原我們提交時的中文。以下是GBK,UTF-8,ISO-8859-1三者之間互相轉換的內存快照:

我們可以看到,偶數漢字可以在UTF-8,GBK兩者中互相轉換,而奇數個漢字則不能。綜上看來,貌似Tomcat的URIEncoding設置為UTF-8是最好的解決辦法,不過這樣的設置依然無法解決上面我所說的第三、第四種情況。大家繼續向下看。(這里有一點我不確定,就是頁面提交至Servlet容器時,是以頁面的charset方式編碼后直接進入容器,還是以charset轉碼為ISO-8859-1方式進入,大家有什么見解?)

2.表單的post提交

對于這種方式的請求,request.setCharacterEncoding("一般來自于web.xml中過濾器設置的參數")方法進行編碼設置將會產生作用,struts的表單提交方式默認為post方式,那么按照上面我的環境設置,頁面,容器,都采用UTF-8編碼方式,就不會產生中文亂碼問題。

3.頁面鏈接中傳遞中文參數

我虛擬一個這樣的場景,請求頁面中有如下代碼

Html代碼?

<%

Stringusername="編輯";

%>

<ahref="hello.do?username=

分享:

喜歡

0

贈金筆

加載中,請稍候......

評論加載中,請稍候...

發評論

登錄名: 密碼: 找回密碼 注冊記住登錄狀態

昵???稱:

評論并轉載此博文

發評論

以上網友發言只代表其個人觀點,不代表新浪網的觀點或立場。

總結

以上是生活随笔為你收集整理的tomcat编码配置gbk_Tomcat中的编码问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。