在编译过程中
浏览器通常依据http header: Content
type的值来决定用什么encoding
比如遇到Content
Type: text/html; charset=UTF
页面使用的就UTF
编码
但是考虑到离线的html(用户可能把页面html保存到本地)
打开离线的html的时候就要在meta指定编码
当然不指定也会有default值
那么不指定有时就可能出现乱码
以下是Java web应用的常见编码问题
JSP页面的编码
有以下三种方式 如果同时有第一种和第二种的时候只有一种会生效(如果不同的话)还有第一种和第二种会覆盖第三种最后要注意的是在使用)或)声明编码类型时如果页面中include了其他JSP 对于<%@ include file=BBjsp %>和<jsp:include page=BBjsp/>的区别 假设在AAjsp中使用前一种方式includeBBjsp那么BBjsp中就不能有重复的编码的声明效果是AAjsp和BBjsp都使用AAjsp中声明的编码方式进行编码
如果是使用后一种include的方式的话AAjsp和BBjsp中都可以有各自编码的声明
) <%@ page contentType=text/html;charset=UTF%>
) <%@ page pageEncoding =charset=UTF%>
) 在webxml中添加以下设置
<jspconfig>
<jsppropertygroup>
<urlpattern>*jsp</urlpattern>
<pageencoding>UTF</pageencoding>
</jsppropertygroup>
</jspconfig>
Http Request的编码
通常浏览在发送一个请求到服务器的时候不会设置字符编码在服务器端为了统一编码可以在filter 中使用requestsetCharacterEncoding(UTF)来设置编码 一般浏览器都是用默认的ISO字符编码要解决中文参数乱码的时候都必须这一步
http Response的编码
http response中可以设置输出到浏览器的数据使用的编码方法是responsesetCharacterEncoding(UTF)和responsesetContentType(text/html; charset=UTF) 如果只是单纯的设置编码最好是用responsesetCharacterEncoding(UTF)因为responsesetContentType(text/html; charset=UTF)是针对具体的MIME类型设置对应的字符编码需要注意的是这里设置的编
码对JSP页面不一定起作用理由是JSP页面有自己设置字符编码的方式而且优先级更高
webxml和weblogicxml中的mime的设置
在webxml中可以指定mime映射同时也可以指定对应类型使用的字符编码(这里的设置也可以使用中所说的和responsesetCharacterEncoding来做到)比如
<mimemapping>
<extension>html</extension>
<mimetype>text/html;
charset=UTF</mimetype>
</mimemapping>
在weblogicxml中可以设置默认的mime类型和字符编码
<containerdiscriptor>
<defaultmimetype>text/html; charset=UTF</defaultmimetype>
</containerdiscriptor>
还有
<charsetparams>
<inputcharset>
<resourcepath>/*</resourcepath>
<javacharsetname>UTF</javacharsetname>
</inputcharset>
</charsetparams>
html页面的编码
在web应用中通常浏览器会根据http header: Contenttype的值来决定用什么encoding 比如遇到ContentType: text/html; charset=UTF 页面使用的就UTF编码但是考虑到离线的html(用户可能把页面html保存到本地) 打开离线的html的时候就要在meta指定编码当然不指定也会有default值那么不指定有时就可能出现乱码
Meta标签<meta httpequiv=ContentType content=text/html; charset=UTF/>
总的来说一个应用中html http request http response 和jsp pages中最好显示地指定相同的字符编码最方便的就是都设为UTF所有字符都不会出错对于mime mapping的设置最好是在webxml中设置weblogic中的关于字符编码的设置一般不用设置