对于中文乱码问题,Java中才用的默认编码方式是Unicode,而中文的编码方式一般情况是GB2312,因为编码格式的不同,导致在中文不能正常显示。在不同的JDK版本和不同的应用服务器中的处理方法是不同的。但是其本质上都是一样的,就是把中文字符转化成合适的编码方式,或者是把在显示中文的环境中声名采用GB2312的编码。统一编码方案之后自然可以正常显示。
1.1 JSP页面中文乱码
在JSP页面中,中文显示乱码有两种情况:一种是HTML中的中文乱码,另一中是在JSP中动态输出的中文乱码。
解决方案:修改代码中page指令。具体修改如下:<% page language=”java” import=”java.util.*” contentType=”text/html;charset=gb2312” %>
1.2 URL传递参数中文乱码
一般情况下,可以用类似http://localhost:8080/chapt4/URLCharset.jsp?param='中文'这种形式来传递参数,而且HTML在处理表单的时候,当表单的method采用get方法的时候,传递参数的形式与URL传递参数的形式基本一样。
对于URL传递中文参数乱码这个问题,其处理方法比较独特,仅仅转换这个中文字符串的编码或者设置JSP页面显示编码都是不能解决问题的。这里需要对Tomcat服务器的配置文件进行修改,即Tomcat的conf目录下的server.xml配置文件,在<Connector>中添加URLEconding=”gb2312”。
1.3表单提交中文乱码
对于表单中提交的数据,可以使用request.getParameter("")的方法获取。但是当表单中如果出现中文数据的时候就会出现乱码。
造成这个问题的原因是:在Tomcat中,对于以Post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码不支持中文字符。对于这个问题,可以采用转换编码格式的方法来解决。即可以调用String类的getBytes方法进行编码转换。
1.4数据库操作中文乱码
在建立数据库的时候,应该选择支持中文的编码格式,最好能和JSP页面的编码格式保持一致,这样就可以尽可能减少数据库操作的中文乱码问题。同时在JDBC连接数据库的时候可以使用类似下面这种形式的URL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs;useUnicode=true;characterEncoding=gb2312。
上面所说的方法只适用于创建数据库的时候已经选择支持中文的编码,不过当一个数据库已经创建而且编码格式已经是ISO-8859-1时,这种情况下通过重新创建数据库显然是不现实的。这时只有在读取数据库的时候进行转码,使用的方法还是上一节的转码方法。
1.5 Eclipse开发工具中JSP文件中文不能保存
在Eclipse中,JSP文件默认的编码格式为ISO-8859-1,所以在JSP代码中间如果出现中文就不能保存。
对于这个问题,这要在JSP页面中指明页面编码即可。即page指令中添加pageEncoding=”gb2312”。
1.6 Eclipse开发工具中中文显示乱码
在Eclipse中,由于默认的JSP编码格式为ISO-8859-1,所以当打开由其他编辑器编辑的JSP页面就会出现乱码。对于这个问题,只需要更改eclipse的设置即可。Eclipse,Window->Preferences->General->Content Types->Text>JSP,修改Default encoding 为GB2312即可。当然也可以把jsp文件用txt打开,然后另存为UniCode格式。
1.7 JSP下载中文文件名乱码
在实现文件下载功能的时候,如果出现中文文件名,如果不进行特殊的处理,下载下来的中文文件名会变成乱码,在下载前,就需要对这个文件名进行处理,然后才能正常显示中文的文件名。
解决方案:运用response对象的setCharacterEncoding,setHeader(filename改为ISO-8859-1编码),setContentType方法即可。
当然我们在面对一些中文乱码问题时,可以编写过滤器filter实现转换字符编码
PS:我觉得写的还算详细。一些东西参考《零基础学习Java Web开发》,与大家拿出来分享。
posted on 2010-04-26 15:41
landon 阅读(2151)
评论(0) 编辑 收藏 所属分类:
Program