J2EE项目之字符编码

J2EE项目之字符编码

最近项目是使用j2ee进行开发的,编码同一使用utf8编码,经过上网搜索加自己摸索终于把编码的问题搞定了,特此记录一下,以便以后查阅。

环境:Win7 32bit、MyEclipse(自带的Tomcat)

1、首先在IDE中设置编码

打开首选项窗口:【window】->【Preferences】

(1)、【General】->【WorkSpace】

(2)、【General】->【Content Types】将项目中使用到的文件设置为UTF-8格式(.java.jsp.htm.css.js等)

2、上面设置完编码之后,建立工程之后,新建jsp文件发现编码不是utf8二十iso编码。按照下面方法进行设置

双击工程中的jsp文件,在编辑器中打开,在编辑器点击右键,选择【Preferences...】,在侧边选择【jsp】,右侧设置编码为utf8

3、以上设置完毕之后。运行工程,发现在Servlet中out中文的时候会出现下面的异常:

java.io.CharConversionException: Not an ISO 8859-1 character: 啊

解决方法是:向浏览器输出不使用ServletOutputStream而改用PrintWriter

out=resp.getOutputStream();    ==》    out=resp.getWriter();

4、设置成PrintWriter之后,没有异常抛出了,但从后台输出中文,页面上显示的仍然是乱码

5、在调用resp.getWriter()或者getOutputStream()之前的地方加上以下代码即可

resp.setCharacterEncoding("UTF-8");



如果此段代码之前已经调用过resp.getWriter()或者getOutputStream(),编码将设置失败,可能jsp的处理方式是在获取输出流的时候一并将编码设置好,内部应该采用的单例模式,多次调用getWriter()或者getOutputStream()返回的应该是同一对象

控制台输出:

最保险的做法是在未调用response的任何方法前首先调用setCharacterEncoding设置编码

6、现在从server向浏览器输出中文可以正常显示了

7、原以为这样就好了,没想到发现从浏览器传送数据到后台的时候,发现中文会出现乱码

同样的做法是在未调用request.getParamter方法之前设置转换编码

req.setCharacterEncoding("UTF-8");

注意:这样设置只是对post数据起作用,get的数据需要手动转码。本人就是在前台中使用的Jquery的getJSON方法,发现数据没有正确解码,换成post方法就好了

8、这样设置之后发现从前台传过来的数据可以正确解码,但插入数据库的时候发现插入的数据是乱码

数据库我采用的是mysql,编码设置为utf8.因为从数据库中取出的数据显示在前台没有乱码问题,于是想可能是插入的时候编码没有处理好(出现问题的地方应该是拼装sql语句之前)

连接数据库是使用的hibernate,于是想是不是需要配置hibernate的编码方式,百度之后发现主要在连接字符串上面加上编码参数即可:

jdbc:mysql://localhost/dbname

=》

jdbc:mysql://localhost/dbname?useUnicode=true&characterEncoding=UTF-8
来源:小二来壶酒
www.cnzhujie.cn
http://www.cnblogs.com/zhujiecode/archive/2012/08/16/2643027.html

猜你喜欢

转载自965595676.iteye.com/blog/2329464