[转载]Java web应用中的常见字符编码问题的解决方法
以下是 Java web应用的常见编码问题
1. html页面的编码
在web应用中,通常浏览器会根据http header: Content-type的值来决定用什么encoding, 比如遇到Content-Type: text/html; charset=UTF-8, 页面使用的就UTF-8编码. 但是考虑到离线的html(用户可能把页面html保存到本地), 打开离线的html的时候就要在meta指定编码,当然不指定也会有default值,那么不指定有时就可能出现乱码。
Meta标签
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
2. Http Request的编码
通常浏览在发送一个请求到服务器的时候,不会设置字符编码,在服务器端为了统一编码,可以在filter 中使用request.setCharacterEncoding("UTF-8")来设置编码. 一般浏览器都是用默认的ISO-8859-1字符编码,要解决中文参数乱码的时候都必须这一步。
3. http response的编码
http response中可以设置输出到浏览器的数据使用的编码方法是response.setCharacterEncoding("UTF-8")和response.setContentType("text/html; charset=UTF-8"), 如果只是单纯的设置编码,最好是用response.setCharacterEncoding("UTF-8"),因为response.setContentType("text/html; charset=UTF-8")是针对具体的MIME类型设置对应的字符编码。需要注意的是这里设置的编码对JSP页面不一定起作用,理由是JSP页面有自己设置字符编码的方式,而且优先级更高。
4 JSP页面的编码
有以下三种方式, 如果同时有第一种和第二种的时候只有一种会生效(如果不同的话),
还有第一种和第二种会覆盖第三种
最后要注意的是在使用1)或2)声明编码类型时,如果页面中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中都可以有各自编码的声明。
1) <%@ page contentType="text/html;charset=UTF-8"%>
2) <%@ page pageEncoding ="charset=UTF-8"%>
3) 在web.xml中添加以下设置
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
5. web.xml和weblogic.xml中的mime的设置
在web.xml中可以指定mime映射,同时也可以指定对应类型使用的字符编码 (这里的设置也可以使用3中所说的http response.setContentType和response.setCharacterEncoding来做到),比如:
<mime-mapping>
<extension>html</extension>
<mime-type>text/html; charset=UTF-8</mime-type>
</mime-mapping>
在weblogic.xml中可以设置默认的mime类型和字符编码
<container-discriptor>
<default-mime-type>text/html; charset=UTF-8</default-mime-type>
</container-discriptor>
还有
<charset-params>
<input-charset>
<resource-path>/*</resource-path>
<java-charset-name>UTF-8</java-charset-name>
</input-charset>
</charset-params>
总的来说,一个应用中html, http request, http response 和jsp pages中最好显示地指定相同的字符编码,最方便的就是都设为UTF-8,所有字符都不会出错。对于mime mapping的设置最好是在web.xml中设置。weblogic中的关于字符编码的设置一般不用设置(如果你把前面所说的都设置正确以后)。
[转载]Java web应用中的常见字符编码问题的解决方法的更多相关文章
- Java web应用中的常见字符编码问题的解决方法
以下是 Java Web应用的常见编码问题 1. html页面的编码 在web应用中,通常浏览器会根据http header: Content-type的值来决定用什么encoding, 比如遇到Co ...
- 关于web.xml中配置Spring字符编码过滤器以解决中文乱码的问题
当出现中文乱码问题,Spring中可以利用CharacterEncodingFilter过滤器解决,如下代码所示: <!-- Spring字符编码过滤器:解决中文乱码问题 --> < ...
- 在Java Web程序中使用监听器可以通过以下两种方法
之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...
- JAVA and JAVA WEB with TOMCAT and ECLIPSE 学习过程中遇到的字符乱码问题及解决方法汇总(随时补充)
JAVA语言具有跨平台,unicode字符集编码的特点. 但是在开发过程中处理数据时涉及到的字符编码问题零零散散,尤其是处理中文字符时一不留神就可能出现一堆奇奇怪怪的符号,俗称乱码. 对于乱码,究其原 ...
- Android studio中出现非法字符时的部分解决方法
我将原来在Eclipse中开发的工程搬到了Android studio上来,在运行,编译程序的过程中出现了错误.提示存在非法字符. 后来发现是由于程序代码中有中文字符的出现,问题就出在对中文支持的UT ...
- java web 项目中 简单定时器实现 Timer
java web 项目中 简单定时器实现 Timer 标签: Java定时器 2016-01-14 17:28 7070人阅读 评论(0) 收藏 举报 分类: JAVA(24) 版权声明:本文为博 ...
- Java Web开发中路径问题小结
Java Web开发中,路径问题是个挺麻烦的问题,本文小结了几个常见的路径问题,希望能对各位读者有所帮助. (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 ...
- Java Web项目中连接Access数据库的配置方法
本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...
- java web项目中打开资源文件中文乱码
1 java web项目中经常使用多模块管理.在某一个模块中添加了一些资源文件.但不是启动项目.有时候需要在程序中读取资源文件内容,打包后放到容器中就不能正常运行了.需要将所有资源文件放到启动项目的 ...
随机推荐
- dlsym
在Android源码中发现,会如下使用: dlsym(RTLD_DEFAULT, name); 也就是说 handle=RTLD_DEFAULT,在网上查了下,大致是说会在当前进程中按照 defaul ...
- PS PNG导出的时候是否交错有什么影响
已解决 导出png格式交错什么意思 我百度的答案一律说png支持交错,可是交错两个字的意思是什么啊,那位专家请指教.谢谢啦!! 问题补充: 我用photoshop或者coreldraw制作按钮时候不是 ...
- IOS 编程中引用第三方的方类库的方法及常见问题
方法一:直接复制全部源文件到项目中 这样的方法就是把第三方类库的全部源文件拷贝到项目中,直接把全部.h和.m文件拖到XCode项目中就可以. 注意: 1. 假设第三方类库引用了一些系统自带类库,那么在 ...
- #include <>与#include""区别
<>先去系统目录中找头文件,如果没有在到当前目录下找.所以像标准的头文件 stdio.h.stdlib.h等用这个方法. 而""首先在当前目录下寻找,如果找不到,再到系 ...
- SQL语句练习手册--第二篇
一.书到用时方恨少:"图书-读者-借阅"类题目 1.1 本题目的表结构 本题用到下面三个关系表: CARDS 借书卡. CNO 卡号,NAME 姓名,CLASS 班级 BOOKS ...
- Volatile 多线程中用到的关键字
前言 不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能. 首先来看看为什么会出现这个关键字. 内存可见性 由于 Java 内存模型(JMM)规定,所有的变量都存放在主内存中,而每个 ...
- C语言学习笔记(一) 开发环境的搭建
写这个系列的原因是因为最近在学习C语言,记录博客会让自己能够更好的掌握学习到的东西.编程贵在坚持,每天改变一丢丢! C语言开发两个软件,一个是文本编辑工具,Notepad++或者是EditPlus都可 ...
- Oracle database datafile header中记录的datafile的大小
本文的环境:Oracle Databae 12.1.0.2, rhel5.9 x86-64bit [oracle@rhel59 orcl]$ pwd /u01/app/oracle/oradata/o ...
- PHP设置会话(Session)超时过期时间实现登录时间限制
最近某个PHP项目用到了限制登录时间的功能,比如用户登录系统60分钟后如果没有操作就自动退出,我搜索了网络收集了有以下方法可供参考. 第一种方法即设置php.ini配置文件,设置session.gc_ ...
- Webpack与Gulp、Grunt区别
Webpack与Gulp.Grunt没有什么可比性,它可以看作模块打包机,通过分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等 ...