中文引數問題

2021-08-29 13:28:58 字數 1370 閱讀 4332

問題的產生:

做了這樣乙個功能,記錄所訪問過的歷史**,然後放入乙個棧中,以便檢視歷史能順利返回到曾經訪問過的歷史頁面,由於將所有的引數也一起放在棧中構造了乙個帶參的url,所以對於一些引數中存在中文的url,就不可避免的遇到了中文引數以get方式提交的情況。

開發環境是:tomcat 5.x

生產環境是:websphere 6.1

在web.xml中加入了非常通用的encodingfilter。但是在tomcat中發現這個filter沒有發揮其應該發揮的作用,即引數出現中文時,會亂碼。但是奇怪的是在websphere中未發現這樣的情況,於是,開始搜尋網上解決方案。雖然在tomcat中要解決這樣的問題很簡單,只需要在server.xml中修改connector:

就能解決,但是問題的原因究竟在**,websphere是否需要同樣的配置,或者是否已經有類似的配置了?這些問題必須搞清楚,不然很難控制。

問題的原因:

首先說說tomcat產生這個問題的原因,在 tomcat4 中 get 與 post 的編碼是一樣的,所以只要在過濾器中通過 request.setcharacterencoding 設定一次就可以解決 get 與 post 的問題。然而,在 tomcat5 中,get 與 post 的卻進行了不同的處理,對於post方法,採用了和tomcat4的編碼處理方法,通過request.setcharacterencoding進行編碼處理,而get方法將通過uri提交處理,tomcat會查詢server.xml檔案中connector 元素中的引數uriencoding的值進行對uri進行encoding,如果沒有這個值,將用iso8859-1進行encoding,這樣所產生了乙個

set character encoding

filters.setcharacterencodingfilter

encoding

gbk

無法同時解決post和get的提交編碼。這樣一來就說明產生問題的原因並不是encoding的問題,而是tomcat處理的問題,而websphere沒有出現這樣的問題,可以認為websphere對於post和get方法是一致的,統一通過filter來。

問題解決方案2:

對於tomcat處理這個問題的方法並不是單一的。tomcat的connector元素中另外提供了usebodyencodingforuri引數,其值為boolean型,true代表使用處理body的encoding方法(即request.setcharacterencoding)來處理uri的編碼,這樣就可以用乙個過濾器來同時處理post和get方法了。

題外話:

中國的程式設計師始終是很辛苦的,要不斷在編碼問題上博弈。希望將來會。。。

彈窗傳中文引數問題

近段時間在做一些有關彈出窗台的業務,在彈出窗體呼叫window.open url 方法,一般情況下,我們只需要把引數值以index.jsp?引數名 值 引數名 值這樣的方式就可以傳到彈出窗體裡面了,但是如果你的值是中文的話,好像就接受不了傳過來的值了 var name window.opener.d...

Retrofit 中文引數亂碼問題

中文使用者名稱登入,結果出錯,網上的結論說是 或是然鵝這會使你統一的請求引數攔截失效,具體原因上述鏈結裡有,就是 contenttypeoverridingrequestbody 替換了你的 formbody 所以你新增統一的請求引數就沒啦 那這個 charset utf 8 在哪加上去呢?前面的m...

關於中文引數亂碼的問題

解決方法 1.客戶端編碼 jsp頁面 var username encodeuri encodeuri 中文名稱 2 伺服器端解碼 action中 string username urldecoder.decode username null?username,utf 8 encodeuri 方法 ...