学习笔记 jsp乱码处理

页面,数据库,服务器 等编码方式向utf-8靠拢
1.JSP输出中文的乱码问题
1).jsp页面头部<%@ page contentType="text/html;charset=utf-8" %>(在Servlet中使用httpServletResponse.setContentType("text/html;charset=utf-8")),最好同时在JSP页面的head部分加上<meta http-equiv="Content-Type" content="text/html; charset="utf-8">。
2).在每次要输出中文的地方主动转换编码方式

2.获取表单提交的数据时的中文乱码问题
Java代码 复制代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>   
  3. <% String str=request.getParameter("chStr");   
  4.     if(str==null) str="没有输入值";   
  5.  %>   
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
  7. <html>   
  8. <head>   
  9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">   
  10. <title>Insert title here</title>   
  11. </head>   
  12. <body>   
  13. 你输入的内容为:<%= str %><br/>   
  14. <form action="luanma.jsp" method="post">   
  15. 请输入中文:<input type="text" name="chStr"/><input type="submit" value="确定"/>   
  16.   
  17. </form>   
  18. </body>   
  19. </html>  



这段代码产生提交数据中文乱码
解决办法1.局部解决方法:将表单中的中文数据取出来过后再转换编码,String str = request.getParameter("chStr"); String str = new String(str.getBytes("ISO-8859-1"),"utf-8"),
解决办法2.让所有页面的请求通过一个Filter,将处理字符集设置为utf-8
拷贝tomcat示例代码SetCharacterEncodingFilter到自己的工程中,
在自己工程的web.xml中加入代码:
Java代码 复制代码
  1. <filter>   
  2.  <filter-name>Set Character Encoding</filter-name>   
  3.  <filter-class>linzhanghui.iteye.com.util.filter.SetCharacterEncodingFilter</filter-class>   
  4.  <init-param>   
  5.   <param-name>encoding</param-name>   
  6.   <param-value>UTF8</param-value>   
  7.  </init-param>   
  8. </filter>   
  9. <filter-mapping>   
  10.  <filter-name>Set Character Encoding</filter-name>   
  11.  <url-pattern>/*</url-pattern>   
  12. </filter-mapping>  



3.URL中中文处理:
打开Tomcat安装目录下的/conf/server.xml文件,找到Connector块,往其中添加URIEncoding="utf-8"/>
示例:
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="utf-8" />

4.数据库访问时的乱码问题
连接字符串写成如下形式:
jdbc://mysql://hostname:port/DBname?user=username&password=pwd&useUnicode=true&character Encoding=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){
   String result=null;
   if (src!=null) {
      try {
          result = new String(src.getBytes("ISO-8859-1"),"utf-8");
      } catch (Exception e) {
        result = null;
      }
   }
    return result;
}

于是,在从数据库读出数据过后调用charConvert(rs.getString("colName"))

你可能感兴趣的:(html,tomcat,jsp,mysql,jdbc)