一、页面乱码问题
<%@ page language="java" contentType="text/html; charset=iso8859-1" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>乱码问题</title> </head> <body> <h3>这里是首页。。。</h3> </body> </html>
注:
1)page language="java" pageEncoding="UTF-8" :这里的"UTF-8"指的是jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。
2)contentType="text/html; charset=iso8859-1" :这里的“iso8859-1”指的是解码格式。默认的是“iso8859-1”,当存储格式为“UTF-8”的文件用“iso8859”进行解码时,自然会出现乱码。
3)<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> :这里的“UTF-8”指的是浏览器的解码格式。当前两种格式一致时,这里的格式便显得无关紧要了。存在的问题是,当一个页面嵌入另一个页面时,浏览器不能确认使用哪种解码格式,会出现乱码。
解决方式:将所有的编码,全部设置为“UTF-8”格式,彻底解决此种情况的乱码问题。
二、Post 方式提交表单出现的乱码问题。
1、问题背景:Tomcat 内部默认的编码格式为“iso8859-1”,以post方式提交表单时,如果没有设置提交的编码格式,则会以“iso8859-1”格式进行提交,接收参数时,却以“UTF-8”格式接收,就会出现乱码问题。
2、解决方式。
1)接收参数时,进行编码转换。如:
String userName= new String(request.getParameter("userName").getBytes("ISO-8859-1"),"utf-8")
2)在接收参数开始处,设置请求的编码。
request.setCharacterEncoding("UTF-8")
3)使用过滤器对所有的jsp进行处理。在web.xml 中加入过滤器:
<filter> <filter-name>Set Character Encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
三、Get 方式提交表单出现的问题。
1、问题背景:Tomcat 内部默认的编码格式为“iso8859-1”,以get方式提交表单时,Tomcat 以“iso8859-1”对汉字进行编码,编码后追加到url。
接收参数时以“UTF-8”格式进行接收出现乱码。
2、解决方式:
1)接收参数时,进行编码转换。如:
String userName= new String(request.getParameter("userName").getBytes("ISO-8859-1"),"utf-8")
先以“ISO-88591-1”格式进行解码,然后以“UTF-8”方式进行编码。
2)修改Tomcat服务器配置server.xml文件中对HTTP协议的 Connector配置。
< Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8" />
四、数据库访问时的乱码问题(本段 摘录)
在使用JDBC连接MySQL数据库时,连接字符串写成如下形式可以避免一些中文问题:
jdbc://mysql://hostname:port/DBname?user=username&password=pwd&useUnicode=true&characterEncoding=utf-8
如果是以数据源的方式连接数据库,在配置文件中使用:
<parameter> <name>url</name> <value>jdbc:mysql://hostname:port/DBname?&useUnicode=true&characterEncoding=utf-8</value> </parameter>
如果使用一个已存在的数据库,数据库的编码方式为ISO-8859-1,而Web应用中是utf-8,且数据库中已有很多重要的信息,因此不能通过更改数据库编码方式来解决问题。这时,在往数据库中写数据时,一定要在JDBC连接字符串中加入"useUnicode=true&characterEncoding=ISO-8859-1",这样就可以顺利往数据库写入正常的数据。但是,在将数据读出数据库时,乱码又会出现,这时就应该在数据取出时对其转码,可以将转吗功能写为一个函数,具体实现如下:
public String charConvert(String src){ Stringresult=null; if(src!=null){ try{ result = newString(src.getBytes("ISO-8859-1"),"utf-8"); }catch(Exception e){ result = null; } } returnresult; }
于是,在从数据库读出数据过后调用charConvert(rs.getString("colName")),这样就可以正常显示数据库中的中文数据了。