中采用了同樣的編碼方式捣作,但經(jīng)過tomcat一處理测柠,也會出現(xiàn)亂碼(GET方式)
1炼鞠、請求中文亂碼的處理:
--post
request.setCharacterEncoding("UTF-8");
--get
String name = new String(“中國”.getBytes(“iso-8859-1”),“UTF-8”)
2、響應(yīng)中文亂碼的處理:
--①字節(jié)流:
設(shè)置瀏覽器默認(rèn)打開的編碼:
resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
設(shè)置中文字節(jié)取出的時候編碼.
“中文”.getBytes(“UTF-8”);
--② 字符流:
設(shè)置瀏覽器打開的時候的編碼
resposne.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
設(shè)置response的緩沖區(qū)的編碼
response.setCharacterEncoding(“UTF-8”);
**簡化的寫法轰胁,
response.setContentType(“text/html;charset=UTF-8”);
首先出現(xiàn)中文亂碼的原因是tomcat默認(rèn)的編碼方式是"ISO-8859-1"谒主,這種編碼方式以單個字節(jié)作為一個字符,而漢字是以兩個字節(jié)表示一個字符的赃阀。
一霎肯,get請求參數(shù)中文亂碼的解決辦法
對于get請求解決中文亂碼有兩種途徑一種是修改tomcat默認(rèn)的編碼方式為"UTF-8"
在tomcat的server.xml里把
<Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
修改為
<Connector connectionTimeout="50000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
使用這種方式帶來的問題是在你本機上這么做沒有問題,你無論怎么去修改你tomcat上的配置都沒問題榛斯,
但是測試環(huán)境和生產(chǎn)環(huán)境的服務(wù)器不是輕易說改就能改的姿现,特別是有些公司的服務(wù)器是租賃的,那么在我們
不知道測試環(huán)境和生產(chǎn)環(huán)境服務(wù)器配置的時候就要使用以下的方法來解決get請求的中文亂碼問題肖抱。
來自頁面的一個get請求:
window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("小明"));
服務(wù)器端:
String name = request.getParameter("name");
orgname = URLDecoder.decode(name,"UTF-8");
因為get請求的參數(shù)在請求行上,我們不能像解決post請求那樣使用 request.setCharacterEncoding("UTF-8");這種方式是修改方法體的編碼方式。
所以只能使用以上的方式分別對請求行的漢字進(jìn)行編碼和解碼异旧。其實解決get請求中文亂碼問題最好的方式是避免使用中文意述,比如上面的name="小明",
如果name是一個恒定值的話吮蛹,你可以在你的程序里這樣寫:
window.location.href = getContextPath()+"/manage/user/detail?name="+encodeURI(encodeURI("xiaoming"));
public static final String NAME = "xiaoming";//定義一個常量
String name = request.getParameter("name");
if(name.equals(NAME)){
name = "小明"
}
如果你必須傳中文荤崇,而且name這個參數(shù)的值是動態(tài)的,不斷變化的潮针,建議你在數(shù)據(jù)庫里面建立一張表术荤,
讓你的中文參數(shù)的值都有一個對應(yīng)的id,在請求發(fā)送錢先查一下這張表。
二每篷,post請求參數(shù)中文亂碼的解決辦法
對于post請求瓣戚,請求中問亂碼的兩種解決辦法端圈,就喜聞樂見了。一般也不會有post請求參數(shù)中文亂碼吧子库,認(rèn)為任何一個java的web項目因該都配置了字符集過濾器吧舱权。
但為了這文章的完整性和以后工作學(xué)習(xí)方便,我還是把這兩種方法貼上來吧仑嗅。
(1): request.setCharacterEncoding("UTF-8");
(2):
<filter>
<description>字符集過濾器</description>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<description>字符集編碼</description>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>