在編譯過程中
浏覽器通常依據http header: Content
type的值來決定用什麼encoding
比如遇到Content
Type: text/html; charset=UTF
頁面使用的就UTF
編碼
但是考慮到離線的html(用戶可能把頁面html保存到本地)
打開離線的html的時候就要在meta指定編碼
當然不指定也會有default值
那麼不指定有時就可能出現亂碼
以下是Java web應用的常見編碼問題
JSP頁面的編碼
有以下三種方式
如果同時有第一種和第二種的時候只有一種會生效(如果不同的話)
還有第一種和第二種會覆蓋第三種最後要注意的是在使用
)或
)聲明編碼類型時
如果頁面中include了其他JSP
對於<%@ include file=
BB
jsp
%>和<jsp:include page=
BB
jsp
/>的區別
假設在AA
jsp中使用前一種方式includeBB
jsp
那麼BB
jsp中就不能有重復的編碼的聲明
效果是AA
jsp和BB
jsp都使用AA
jsp中聲明的編碼方式進行編碼
如果是使用後一種include的方式的話
AA
jsp和BB
jsp中都可以有各自編碼的聲明
) <%@ page contentType=
text/html;charset=UTF
%>
) <%@ page pageEncoding =
charset=UTF
%>
) 在web
xml中添加以下設置
<jsp
config>
<jsp
property
group>
<url
pattern>*
jsp</url
pattern>
<page
encoding>UTF
</page
encoding>
</jsp
property
group>
</jsp
config>
Http Request的編碼
通常浏覽在發送一個請求到服務器的時候
不會設置字符編碼
在服務器端為了統一編碼
可以在filter 中使用request
setCharacterEncoding(
UTF
)來設置編碼
一般浏覽器都是用默認的ISO
字符編碼
要解決中文參數亂碼的時候都必須這一步
http Response的編碼
http response中可以設置輸出到浏覽器的數據使用的編碼方法是response
setCharacterEncoding(
UTF
)和response
setContentType(
text/html; charset=UTF
)
如果只是單純的設置編碼
最好是用response
setCharacterEncoding(
UTF
)
因為response
setContentType(
text/html; charset=UTF
)是針對具體的MIME類型設置對應的字符編碼
需要注意的是這裡設置的編
碼對JSP頁面不一定起作用
理由是JSP頁面有自己設置字符編碼的方式
而且優先級更高
web
xml和weblogic
xml中的mime的設置
在web
xml中可以指定mime映射
同時也可以指定對應類型使用的字符編碼(這裡的設置也可以使用
中所說的和response
setCharacterEncoding來做到)
比如
<mime
mapping>
<extension>html</extension>
<mime
type>text/html;
charset=UTF
</mime
type>
</mime
mapping>
在weblogic
xml中可以設置默認的mime類型和字符編碼
<container
discriptor>
<default
mime
type>text/html; charset=UTF
</default
mime
type>
</container
discriptor>
還有
<charset
params>
<input
charset>
<resource
path>/*</resource
path>
<java
charset
name>UTF
</java
charset
name>
</input
charset>
</charset
params>
html頁面的編碼
在web應用中
通常浏覽器會根據http header: Content
type的值來決定用什麼encoding
比如遇到Content
Type: text/html; charset=UTF
頁面使用的就UTF
編碼
但是考慮到離線的html(用戶可能把頁面html保存到本地)
打開離線的html的時候就要在meta指定編碼
當然不指定也會有default值
那麼不指定有時就可能出現亂碼
Meta標簽
<meta http
equiv=
Content
Type
content=
text/html; charset=UTF
/>
總的來說
一個應用中html
http request
http response 和jsp pages中最好顯示地指定相同的字符編碼
最方便的就是都設為UTF
所有字符都不會出錯
對於mime mapping的設置最好是在web
xml中設置
weblogic中的關於字符編碼的設置一般不用設置
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27096.html