`
xxh123
  • 浏览: 33847 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
阅读更多
      相信web站点乱码问题都曾使我们困惑加郁闷不少,在此我积累了几点解决方案,用于解决不同情况下的乱码问题,希望能对各位有些许提示作用。

首先应确定不是因为浏览器的原因导致中文乱码。
本人在刚用firefox时就遇到了url中文乱码的问题,找自己程序及配置找了老久也没解决问题,后来才发现原来是浏览器的配置问题。
问题:编码为utf-8,url 出现乱码。form表单get、post方式都无乱码,页面链接地址也无中文乱码,刷新页面无乱码,但是选中地址栏中的url 敲回车,乱码出现了!
原因:浏览器配置问题。
解决方案:ie:“internet选项/高级”中“总以utf-8发送网址”的选项的配置;
firefox:地址栏中输入about:config,修改network.standard-url.escape-utf8 为False (缺省为True);
如果你想让浏览器直接url-encode成utf-8,修改network.standard-url.encode-query-utf8为true(缺省为false)。
解释:根据Web规范,URL必须以UTF-8字符集进行编码。 而Firefox默认gbk encode,ie默认utf8 encode;另外Firefox对地址中的中文采取了不同于IE的编码方式,也就是说:当url参数值含有中文时firefox默认使用escape进行编码,当参数值没有用escape进行编码时,使用unescape进行解码IE下不会乱码,但Firefox下会乱码。
附:prefs.converted-to-utf8 *    首选项转换成UTF-8编码格式
network.standard-url * Standard URL settings

ok!确认浏览器配置正确后,仍有中文乱码出现,八成儿就是兄弟你代码的问题了,解决方案大概有以下几种。

1、tomcat服务器配置server.xml文件
主要用户处理与页面交互时产生的乱码问题,例如提交表单等。
<!-- Define a non-SSL HTTP/1.1 Connector on port 80-->
<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" maxHttpHeaderSize="8192" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="80" redirectPort="8443" URIEncoding="GBK" useBodyEncodingForURI="true" />

URIEncoding:用来设定通过 URI 传递的内容使用的编码,tomcat 将使用这里指定的编码对客户端传送的内容进行编码。我们通过 get 方法提交的参数实际上都是通过 uri 提交的,由这个参数管理,如果没有设定这个参数,则 tomcat 将使用默认的 iso8859-1 对客户端的内容进行编码。
useBodyEncodingForURI:使用与 Body 一样的编码来处理 URI, 这个设定是为了与 tomcat4保持兼容,原来在 tomcat4 和 tomcat5 中队参数的处理是不一样的,在 tomcat4 中 get 与 post 的编码是一样的,所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。然而,在 tomcat5 中,get 与 post 的处理是分开进行的,对 get 的处理通过前面的 URIEncoding 进行处理,对 post 的内容依然通过 request.setCharacterEncoding 处理,为了保持兼容,就有了这个设定。
所以,设置URIEncoding解决get中的参数问题,配置过滤器解决post的参数问题;或者设置useBodyEncodingForURI为true,get、post都使用过滤器来解决参数问题。

2、数据库bean配置
主要针对与数据库交互时产生的乱码问题,例如插入中文记录或读取中文数据。
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/newfang?useUnicode=true&amp;characterEncoding=gbk&amp;autoReconnect=true</value>
</property>
3、代码中局部解决乱码问题
    主要用于解决个别乱码问题,例如网页显示时中文均显示正常除一两条语句外,那么针对这一两条语句的乱码问题可用该方法。
qString = new String(qString.getBytes("ISO8859_1"), "GBK");
或 qString = URLEncoder.encode(qString, "GBK"); //java url 编码方法
4、web.xml配置,添加filter过滤器
    用于处理全站乱码问题,其实主要也是用于action与jsp页面交互时使用。
<!-- 用于解决中文乱码问题 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>com.qa.util.SetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

SetEncodingFilter代码:
package com.qa.util;
import javax.servlet.*;
import java.io.*;

public class SetEncodingFilter implements Filter
{
protected String encoding=null;//定义缺省字符编码方式
protected boolean ignore=true;//定义客户端指定的编码方式是否应被忽略
protected FilterConfig filterConfig=null;//定义过滤器配置对象,若为null,则说明过滤器未配置

public void destroy()//停止过滤器的工作
{
this.encoding=null;
this.filterConfig=null;
}
//设置字符编码
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain)
throws IOException,ServletException
{
if(ignore||(req.getCharacterEncoding()==null))
{
req.setCharacterEncoding(selectEncoding(req));
}
chain.doFilter(req,res);
}
//启动过滤器
public void init(FilterConfig filterConfig)throws ServletException
{
this.filterConfig=filterConfig;
this.encoding=filterConfig.getInitParameter("encoding");
String value=filterConfig.getInitParameter("ignore");
if(value==null) this.ignore=true;
else if(value.equalsIgnoreCase("true")
||value.equalsIgnoreCase("yes")) this.ignore=true;
else this.ignore=false;
}
//选择合适的字符编码方式
protected String selectEncoding(ServletRequest req)
{
return this.encoding;
}
//返回filterConfig对象
public FilterConfig getFilterConfig()
{
return filterConfig;
}
//设置filterConfig对象
public void setFilterConfig(FilterConfig filterConfig)
{
this.filterConfig=filterConfig;
}
}

5、服务器apache上的乱码。
除了以上的情况外,还有apache的配置问题,注意的方面有以下几点:
1)conf/httpd.conf
把 AddDefaultCharset ISO-8859-1 改成 AddDefaultCharset GBK
     2)apache进行了rewrite
把需要rewrite的url中的中文参数进行两次编码(encode),因为apache在rewrite时会做一次url解码,这时jk进行请求转发时,就不会再是编码后的字符串了;
或者在接收请求时先用ISO-8859-1取字节流,再使用UFT-8来new String。(new String(str.getBytes("ISO-8859-1"),"UFT-8"))

当然,如果你有其他解决方案,不妨也分享分享,记得留言哦!


分享到:
评论

相关推荐

    firefox Browse和firebug 火狐浏览器和火狐bug

    Firebug是firefox下的一个插件,能够调试所有网站语言,如Html,Css等,但FireBug最吸引我的就是javascript调试功能,使用起来非常方便,而且在各种浏览器下都能使用(IE,Firefox,Opera, Safari)。除此之外,其他功能...

    CSS HACK 兼容列表 Firefox,IE5,IE5.5,IE6,IE7,IE8.rar

    这份名为“CSS HACK 兼容列表 Firefox,IE5,IE5.5,IE6,IE7,IE8.rar”的压缩包,提供了针对这些浏览器的CSS Hack解决方案,以确保在不同环境下页面的正常显示。 CSS Hack通常指的是利用浏览器解析CSS的bug或者特性,...

    css规范_IE bug,IE与Firefox的CSS兼容问题.....整理

    本文主要探讨了针对IE浏览器,尤其是IE与Firefox之间存在的CSS兼容性问题,并提供了一些解决方案和编写高效、维护友好的CSS代码的规范。 一、使用CSS方法 遵循W3C标准编写CSS,避免使用非标准或过时的属性,这将有...

    iebug总结jar包

    "iebug总结jar包"是一个专门针对这些问题的资源集合,它包含了处理IE bug的相关资料,特别是针对IE6的解决方案。以下是基于这个主题的详细知识点: 1. **IE6的渲染引擎**:IE6使用的是Trident渲染引擎,它与现代...

    IE与Firefox的CSS兼容大全

    在网页设计领域,Internet Explorer(简称IE)和Mozilla Firefox(简称Firefox)是两种常见的浏览器,它们对CSS(层叠样式表)的支持有所不同,这给开发者带来了兼容性问题。本篇文章将详细探讨IE与Firefox在CSS解析...

    ie6、ie7、ie8、ie9、ie10、firefox、google chrome浏览器Hack及兼容性演示页面

    这里我们将深入探讨标题中提到的`ie6`到`ie10`以及`Firefox`和`Google Chrome`浏览器的兼容性问题,以及它们所基于的`Gecko`和`WebKit`内核。 首先,`IE6`至`IE10`是微软公司推出的一系列Internet Explorer浏览器,...

    CSS兼容IE6,,IE7,I8 FIREFOX

    ### CSS兼容IE6、IE7、IE8及Firefox解析与应用 #### 一、引言 随着Web技术的发展,浏览器的兼容性问题一直是前端开发者关注的重点。尤其在早期的Web开发过程中,Internet Explorer(IE)系列浏览器由于市场份额较大...

    非常经典的ie bug汇总,页面之王的代表作

    这个问题在标准浏览器如Firefox中则不会出现。 为了避免这种错误的元素扩展,开发者可以采用以下策略: - 使用`&lt;!DOCTYPE ...

    让CSS兼容IE和Firefox的技巧集合

    标题中的“让CSS兼容IE和Firefox的技巧集合”是指在网页设计中,针对Internet Explorer(IE)和Firefox这两种浏览器之间CSS样式兼容性问题的解决策略。描述中的“嘿呌,IE不再是个bug”暗示了这些技巧能帮助开发者...

    css兼容性(IE 和 firefox)技巧大全.doc

    在网页设计中,CSS(层叠样式表)的兼容性问题常常困扰着开发者,尤其是在处理IE(Internet Explorer)和Firefox这两个浏览器之间的差异时。本文主要针对这些差异提供了一些实用的技巧,帮助开发者解决常见的CSS兼容...

    最全的CSS浏览器兼容问题整理(IE6.0、IE7.0 与 FireFox)

    ### 最全的CSS浏览器兼容问题整理(IE6.0、IE7.0 与 Firefox) 在Web开发过程中,确保网站能够在不同的浏览器上正确显示是非常重要的一步。尤其在早期的Web开发时代,面对像IE6、IE7这样的浏览器,以及当时主流的...

    IE和Firefox之间兼容性问题

    ### IE和Firefox之间兼容性问题详解 #### 一、引言 随着Web技术的发展,不同浏览器之间的兼容性问题一直是前端开发者关注的重点。IE(Internet Explorer)浏览器和Firefox浏览器作为市场上较为流行的两种浏览器,在...

    CSS兼容IE和Firefox的技巧集合

    ### CSS兼容IE和Firefox的技巧集合 #### 一、引言 随着Web技术的发展,不同浏览器之间的兼容性问题一直是前端开发者关注的重点。特别是在早期的Web开发中,Internet Explorer(IE)和Firefox这两种主流浏览器在CSS...

    莫名其妙的IE 3像素Bug

    这个问题的根本原因在于IE浏览器对盒模型的处理方式与大多数现代浏览器(如Firefox、Chrome和Safari)不同。在IE中,传统盒模型(即`box-sizing: content-box`)会将边框和内填充计算在元素的总宽度和高度内,而其他...

    js兼容火狐中文日历calender.ie.firefox.mqney

    优点:此代码优点是兼容火狐,简洁,中文。 乱码:如果日历出现中文乱码,并且如果在Eclipse中,那么请调整js的属性中编码为utf-8,html页面亦如是。 效果:页面为一个TextField空间,隐藏一个Div。点击TextField,...

    CSS浏览器兼容问题整理(IE6.0、IE7.0_与_FireFox)

    标题和描述均指向了一个核心议题——CSS在不同浏览器(尤其是IE6.0、IE7.0与Firefox)之间的兼容性问题。这个问题对于Web开发者来说至关重要,因为不同的浏览器可能对CSS的解析和渲染方式存在差异,导致网页在不同...

    Firefox Bug: inline/inline-block的间隙采用代码缩进可解决

    总的来说,了解并掌握如何处理`inline-block`的浏览器差异,尤其是Firefox和IE8中的这个bug,是提升前端开发者技能的重要一环。在实践中,我们应当根据项目需求和浏览器兼容性选择最合适的布局策略,以确保网页在...

Global site tag (gtag.js) - Google Analytics