Tomcat解決中文亂碼的幾種方式

2021-07-15 03:18:13 字數 1793 閱讀 7219

一、對tomcat_home/conf/server.xml檔案進行配置(本機的完整目錄為d:/users/administrator/tomcat/apache-tomcat-7.0.54/conf/server.xml)

核心**如下(其中最後一句是自己加的):

-->這種方式一般不建議使用,因為它修改的是tomcat平台的編碼,而業內沒人對其不修改,如果人為修改會影響其他專案的執行。

二、逆向編碼解碼還原法

之所以會出現亂碼,是因為瀏覽器將中文傳給tomcat時,tomcat以預設的iso8859-1方式對其解碼,而iso8859-1不屬於中文碼表,故而出現亂碼。根據這個原理可逆向還原。

如:

byte buf = request.getparameter("name").getbytes("iso8859-1");

string name = new

string(buf,"gbk");

這樣得到的name便是前台傳來的正確的中文引數了

這種方式比較偏向底層,而且有乙個弊端,就是當瀏覽器傳送的中文引數很多時,需要乙個個設定,比較羅嗦,不利於節省時間。

三、將瀏覽器的表單的提交方式設為post方式,同時在servlet裡在接受引數前將request的編碼設定為gbk或者utf-8。

前台形如:

action="login.jsp"

method="post">

使用者名稱:type="text"

name="name">

密 碼:type="text"

name="pwd">

type="submit"

value="登入">

form>

後台形如:

request.setcharacterencoding("utf-8");

string name = request.getparameter("name");

這樣也能正確地接受中文引數了。當然,這種方式也存在弊端,試想下當專案發布後,如果需要修改編碼為gbk,則要修改源**,而對客戶而言,這需要反編譯等步驟直接修改**,有點困難。

四、通過web專案的webroot/web-inf/web.xml檔案進行配置引數,同時可在servlet中進行讀取。

web.xml的示例核心**如下:

loginservlet-name>

cn.hncu.servlets.loginservletservlet-class>

characterparam-name>

gbkparam-value>

init-param>

servlet>

servlet示例核心**如下:

public

void

init(servletconfig config) throws servletexception

這種方法彌補了方法3的缺陷,方便後期維護和修改,使用者修改時不需要改源**,只需修改web.xml即可。

解決Tomcat下中文亂碼問題

位址列中引數包含中文並提交 瀏覽器不會採用頁面的charset方式對url中的中文進行編碼後提交至伺服器 ie,firefox都一樣 而是採用系統的gbk轉碼為iso 8859 1之後提交至servlet容器,因為進入容器時中文進行了gbk至iso 8859 1的轉碼,所以頁面上會顯示為亂碼。ser...

Tomcat解決中文亂碼之道 GET POST

1 get方法 問題 後台接收name值的時候是亂碼。原因 tomcat對get方式提交的請求對query string 處理時採用了和post方法不一樣的處理方式。與tomcat4不一樣,所以設定setcharacterencoding gbk 不起作用的 解決方案 uriencoding gbk...

tomcat中文亂碼

問題的現象 我在本地的tomcat的server.xml中設定如下 頁面中沒亂碼,url傳參也沒有問題,但是在192.168.2.40的linux伺服器上做這樣的設定就不行了,雖然頁面沒有亂碼,但是傳參的時候就出現中文亂碼了!原因分析 因為我們伺服器中的tomcat是通過apache 系統請求的,而...