Java Web項(xiàng)目中,解決中文亂碼方法總結(jié)如下
第一種情況:調(diào)用jsp頁(yè)面中文顯示亂碼
問(wèn)題描述:通過(guò)瀏覽器調(diào)用jsp頁(yè)面,在瀏覽器中顯示的中文內(nèi)容出現(xiàn)亂碼。
解決方法:首先確認(rèn)本jsp在編輯器中保存文件內(nèi)容時(shí),使用的是utf-8的編碼格式,然后在jsp頁(yè)面的開(kāi)始處添加<%@ pageEncoding="utf-8"%>就可以解決這種中文亂碼問(wèn)題
第二種情況:調(diào)用servlet頁(yè)面顯示亂碼
問(wèn)題描述:通過(guò)瀏覽器調(diào)用servlet,servlet在瀏覽器中顯示的內(nèi)容出現(xiàn)亂碼。
解決方法:在servlet使用response對(duì)象輸出前,先執(zhí)行response.setContentType("text/html;charset=utf-8");設(shè)定輸出內(nèi)容的編碼為utf-8。
第三種情況:post表單傳遞參數(shù)亂碼
問(wèn)題描述:通過(guò)jsp,html,或servlet中的表單元素把參數(shù)提交給對(duì)應(yīng)的jsp或者servlet時(shí),在接收的jsp或servlet中接收到的參數(shù)中文顯示亂碼。
例如:
提交jsp代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<%@ page language="java" pageEncoding="utf-8"%> < html > < head > < title >輸入表單</ title > </ head > < body > < form id = "inputForm" name = "inputForm" method = "post" action = "display.jsp" > 用戶(hù)名:< input type = "text" name = "username" />< br /> 密 碼 :< input type = "password" name = "password" />< br /> < input type = "submit" name = "submit" value = "提交" /> </ form > </ body > </ html > |
接收參數(shù)的jsp代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<% @ page language="java" pageEncoding="utf-8"%> < html > < head > < tilte >接收表單</ title > </ head > < body > <% 在這里插入 request.setCharacterEncoding("utf-8"); %> 用戶(hù)名:<%=request.getParameter("username")%>< br /> 密 碼:<%=request.getParameter("password")%>< br /> </ body > </ html > |
解決方法:在接收post提交的參數(shù)前,使用request.setCharacterEncoding("utf-8")設(shè)定接收參數(shù)的內(nèi)容格式為utf-8編碼。見(jiàn)接收表單中的插入內(nèi)容即可。當(dāng)然這種亂碼問(wèn)題最好使用中文過(guò)濾器的方法最好。
第四種情況:URI方式傳遞參數(shù)亂碼
問(wèn)題描述:使用表單傳遞參數(shù),可以通過(guò)post或get方式,不適用表單,還可以使用鏈接方式傳遞參數(shù),這種傳遞參數(shù)方式本質(zhì)上就是get方式傳遞參數(shù),這種方式中傳遞的參數(shù)出現(xiàn)中文時(shí)也可能出現(xiàn)亂碼。
如:
解決方法:?jiǎn)栴}本質(zhì)是get方式傳遞的參數(shù)內(nèi)容默認(rèn)編碼方式問(wèn)ISO8859-1,而且使用request.setCharacterEncoding("utf-8")也無(wú)法解決問(wèn)題,要解決這個(gè)問(wèn)題,修改tomcat服務(wù)器的配置文件。修改tomcat目錄下的conf/server.xml文件的第43行:
修改前內(nèi)容:
1
2
3
|
<Connector port= "8080" protocol= "HTTP/1.1" maxThreads= "150" connectionTimeout= "200000" redirecPort= "8443" /> |
修改后內(nèi)容:
1
2
3
|
<Connector port= "8080" protocol= "HTTP/1.1" maxThreads= "150" connectionTimeout= "200000" redirecPort= "8443" URIEncoding= "utf-8" /> |
這樣就可以解決這種類(lèi)型的亂碼問(wèn)題。
第五種情況:
問(wèn)題描述:在使用一些類(lèi)庫(kù)或者框架時(shí),為了實(shí)現(xiàn)頁(yè)面內(nèi)容國(guó)際化,需要編寫(xiě)對(duì)應(yīng)的properties文件。而properties文件中的中文內(nèi)容在顯示的時(shí)候也會(huì)出現(xiàn)亂碼。
解決方法:這個(gè)亂碼問(wèn)題可以通過(guò)jdk中的native2ascii工具解決。使用如下命令:
出現(xiàn)亂碼問(wèn)題的原因是因?yàn)閖ava編譯器只能處理Latin-1或unicode編碼的字符文件。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。