




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
核心提示:经常在讨论区看到有人问我的JSP显示中文有乱码怎么办,我用request得到的用户输入的中文怎么是乱码经常在讨论区看到有人问我的JSP显示中文有乱码怎么办,我用request得到的用户输入的中文怎么是乱码,我把汉字写到数据库怎么是乱码,等等一些关于汉字乱码的问题。其实这个问题很简单,管它汉字不汉字,还是日文,还是其他的什么双字节的语言,我们一律把它当作UTF-8看待。(一)request中的双字节文字好下面我们就来实现在整个应用程序中使用UTF-8编码工作,之所以选择UTF-8不仅仅之于上述原因,我们知道java的就是基于在UTF-8之上的,所以我们选择UTF-8应该没错_我们首先把我们的.java, .jsp文件都用UTF-8编码来保存,如果以前的没有用UTF-8保存也无所谓,但是建议以后写的都用UTF-8来保存。并在.jsp里面写:而不是然后在web.xml添加下面一段:.Set Character Eadmin.util.filters.SetCharacterEncodingFilterencodingUTF-8Set Character Encoding/*.其中admin.util.filters.SetCharacterEncodingFilter的代码如下:package admin.util.filters;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.UnavailableException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class SetCharacterEncodingFilterimplements Filter protected String encoding = null;protected FilterConfig filterConfig = null;protected boolean ignore = true;public void destroy() this.encoding = null;this.filterConfig = null;public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException / Conditionally select and set the character encoding to be usedif (ignore | (request.getCharacterEncoding() = null) String encoding = selectEncoding(request);if (encoding != null) request.setCharacterEncoding(encoding); /就是这句话在工作的啦,哈哈,它:Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader()./ Pass control on to the next filterchain.doFilter(request, response);public void init(FilterConfig filterConfig) throws ServletException this.filterConfig = filterConfig;this.encoding = filterConfig.getInitParameter(encoding);String value = filterConfig.getInitParameter(ignore);if (value = null) this.ignore = true;else if (value.equalsIgnoreCase(true) this.ignore = true;else if (value.equalsIgnoreCase(yes) this.ignore = true;else this.ignore = false;protected String selectEncoding(ServletRequest request) return (this.encoding);这样,我们的request请求就是以UTT-8编码的,在JSP程序中就可以使用:request.getParameter(myKey)来直接得到UTF-8编码的字符串了,而不需要像这样:new String(request.getParameter(myKey).getBytes(ISO-8859-1), GBK)来解决那些乱码了。(二)数据库处理的双字节文字另外一个,就是写入数据库的问题,我们知道我们在使用mysql的时候可以改用这样的url来处理汉字编码问题:jdbc:mysql:/localhost:3306/upas?useUnicode=true&characterEncoding=gb2312,那么对于那些我们无法像mysql这样解决的怎么办呢?难道我们每次都这样写吗:import java.sql.*;Class.forName(org.gjt.mm.mysql.Driver);Connection con = null;PreparedStatement pstmt = null;ResultSet rs = null;try con = DriverManager.getConnection(jdbc:mysql:/localhost:3306/test, root, );pstmt = con.prepareStatement(SELECT f3, f4 FROM tbl1 WHERE f1 = ? AND f2 = ?);pstmt.setString(1, new String(f1.getBytes(GBK), ISO-8859-1);pstmt.setString(2, new String(f2.getBytes(GBK), ISO-8859-1);rs = pstmt.executeQuery();String f3, f4;while(rs.next() f3 = new String(rs.getString(1).getBytes(ISO-8859-1), GBK);f4 = new String(rs.getString(2).getBytes(ISO-8859-1), GBK);finally /close resouces.其实我们完全可以这样写:import java.sql.*;import com.redv.sql.encoding.*;Class.forName(org.gjt.mm.mysql.Driver);Connection con = null;PreparedStatement pstmt = null;ResultSet rs = null;try con = DriverManager.getConnection(jdbc:mysql:/localhost:3306/test, root, );/接管数据库连接实例boolean coding = true;EncodingConnection codingConnection = new EncodingConnection(con, coding, ISO-8859-1, GBK);/获得接管后的数据库连接实例,以后直接使用con已经是经过EncodingConnection重新包装过的实例con = codingConnection.getConnection();pstmt = con.prepareStatement(SELECT f3, f4 FROM tbl1 WHERE f1 = ? AND f2 = ?);pstmt.setString(1, f1);pstmt.setString(2, f2);rs = pstmt.executeQuery();String f3, f4;while(rs.next() f3 = rs.getString(1);f4 = rs.getString(2);finally /close resouces.看看,怎么样,我们只需要在获取数据库连接的地方稍微修改一下,甚至我们可以把它当作参数保存在 properties里面,改变coding的布尔值来设定是否使用自动编码转换。常常我们可以使用一个Database类来封装获取数据库连接的那段getConnection,以便于我们可以从 ja
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民法魏振瀛课件
- 民法总则干部普法课件
- 初中课外读物考试题及答案
- 博弈论期末考试及答案
- 方舱医护与公众人物
- 安全生产红线意识教育讲解
- 民族进步条例课件
- 民族花园课件
- 新质生产力的核心领域与构成
- 因地制宜发展新质生产力路径
- 家政入股分红合同协议书
- 2025年家政服务员工作技能考试试题及答案解析
- 2025年安全生产责任主体考试题及答案
- 2025年全国保密教育知识竞赛题库附答案
- 2025年医疗器械注册与监管考试试题及答案解析
- 秩序维护人员培训课件
- 铁路作业人员安全课件
- 2025年医疗质量管理质控培训考核试题(含答案)
- 【轻质减负】第2课《中国人首次进入自己的空间站》情境化教学课件
- 浮吊安全知识培训课件
- 商业航天行业深度报告:政策技术需求共振商业航天赛道加速
评论
0/150
提交评论