首页 > 其他 > 详细

中文乱码问题汇总

时间:2015-11-27 13:02:03      阅读:270      评论:0      收藏:0      [点我收藏+]
1、JSP输出中文的乱码问题
原因:没有给JSP页面制定显示字符的编码方式。
解决方法:
在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、获取表单提交的数据时的中文乱码问题
用request.getParameter("paramName")获取表单提交中的数据,且表单数据中含有中文时,返回的字符串出现乱码。
原因:Tomcat的J2EE实现对表单提交,即以POST方式提交的参数采用默认的ISO-8859-1来处理。
解决方法:
一是:转换编码,如String str = request.getParameter("chStr");String str = new String(str.getBytes("ISO-8859-1"),"utf-8")。此法在较大项目中不可行。
二是:让所有页面的请求都通过一个Filter,将处理字符集设置为utf-8。具体做法:将Tomcat的../webapps/servlets-examples/Web-INF/classes/filters/目录下的文件SetCharacterEncodingFilter.class拷到自己的应用的/Web-INF/classes/../filter目录下;然后在web.xml文件的<web-app>后面加上如下配置代码:
    <filter>
         <filter-name>...</filter-name>
         <filter-class>...</filter-class>
         <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF8</param-value>
         </init-param>
    </filter>
    <filter-mapping>
         <filter-name>...</filter-name>
         <url-pattern>/*</url-pattern>
    </filter-mapping>
此法防止某些地方遗漏,减轻程序员编程的负担。
 
3、URL中的中文问题
原因:Tomcat中以get方式提交的请求对query-string处理时采用了和post方法不一样的处理方式。
解决方法:
打开Tomcat目录下的/conf/server.xml文件,找到Connector块,往其中添加URIEncoding="utf-8"/>,添加过后完整的Connector块代码如下:
<Connector debug="0" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8443" enableLookups="false" 
    minSpareThreads="25" maxSpareThreads="75" maxThreads="150" maxPostSize="0" 
    URIEncoding="utf-8"/>
添加完后重启Tomcat。
 
4、数据库访问时的乱码问题
在使用JDBC连接MySQL数据库时,连接字符串写成如下形式可以避免一些中文问题:
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")),这样就可以正常显示数据库中的中文数据了。

中文乱码问题汇总

原文:http://www.cnblogs.com/lydong/p/5000177.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!