• (转)JSP HTML JAVASCRIPT 中文乱码 解决方案 大全


    JSP HTML JAVASCRIPT 中文乱码 解决方案 大全 

      JSP的中文字符一直是各位初学者首先要解决的问题,下面进行了总结,也给出了解决办法。
    C4.1 HTML中文编码转换
     在JSP文件中的静态文字显示乱码,则需要在<head></head>之间增加中文设置代码,如清单附C-5所示。
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
     charset指定UTF-8字符集,当然也可以指定其他支持中文的编码,如GBK和GB2312。但是整个Web应用中一定要统一一种编码,本书推荐统一为UTF-8编码。
    C4.2 JSP中文编码转换
      针对Tomcat下动态内容的中文乱码问题,有以下几个解决办法:
    1. 在每个JSP文件的开头增加如下代码:
    <%@ page language="java" contentType="text/html;charset=UTF-8"
      pageEncoding="UTF-8"%>
    2. 设置编码参数:
    request.setCharacterEncoding("UTF-8");
    3. 使用编码过滤器。创建过滤器类SetCharacterEncoding,源码如清单附C-5所示。
    清单附C-5 SetCharacterEncoding.java
    package chapc;
     
    import java.io.IOException;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
     
    public class SetCharacterEncoding implements Filter {
     
      @Override
      public void destroy() {  
      }
     
      @Override
      public void doFilter(ServletRequest request, ServletResponseresponse,
      FilterChain chain) throws IOException, ServletException{
      //设置字符编码
      request.setCharacterEncoding("UTF-8");
      //将控制传到下一个过滤器,如果没有过滤器则传到被调用者
      chain.doFilter(request, response);
      }
     
      @Override
      public void init(FilterConfig arg0) throws ServletException{
      }
    }
     过滤器类还需要在web.xml中进行配置,设定要过滤哪些请求。过滤器在web.xml中的配置如清单附C-6所示。
    清单附C-6 web.xml片段
    <filter>
     <filter-name>SetCharacterEncoding</filter-name>
     <filter-class>chapc.SetCharacterEncoding</filter-class>
    </filter>
    <filter-mapping>
     <filter-name>SetCharacterEncoding</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>
     方法1、方法2和方法3经常需要使用,但它们一般不是独立使用,而是两两结合:1和2结合;1和3结合。附录A中的示例用到了1和2的结合。第四章Hibernate中的信息发布系统用到了1和3的结合。
    4.修改Tomcat根目录中conf子目录下的server.xml文件,在中加入URIEncoding="UTF-8",如清单附C-7所示。
    清单附C-7 server.xml片段
    <Connector connectionTimeout="20000"
      port="8080"
      protocol="HTTP/1.1"
      redirectPort="8443"
      URIEncoding="UTF-8"/>
     该方法用来解决浏览器地址栏中的传递中文参数导致的乱码问题。浏览器地址栏传递参数(URL传参)一般表现为三种情况:form表单的get方法提交、超链接传参和response传参。
    Ø form表单提交方法是get:
    <form action="registerProcess.jsp"method="get">
    Ø 在超链接中传递中文参数:
    <ahref="a.jsp?p=中文参数">超链接传递中文参数测试</a>
    5. 如果是调用response.sendRedirect传递中文参数产生的乱码,如:
    response.sendRedirect("a.jsp?p=中文参数");
    请修改成如:
    <% //引入URLEncoder %>
    <%@pageimport="java.net.URLEncoder"%>
    <%
    String p = "中文参数";
    //对中文参数编码
    p = URLEncoder.encode(p, "UTF-8");
    response.sendRedirect("a.jsp?p=" + p);
    %>
    以解决乱码问题。
      如果方法4还不能解决某些超链接传参乱码问题,请使用方法5,如下:
    <%@pageimport="java.net.URLEncoder"%>
    <%
    String p = "中文参数";
    //对中文参数编码
    p = URLEncoder.encode(p, "UTF-8");
    %>
    <a href="a.jsp?p=<%=p%>">超链接传递中文参数测试</a>
    6. JavaScript中如果出现URL传参乱码问题,如:
    open("a.jsp?p=中文参数");
    请修改成:
    <script type="text/javascript">
    function openWindow()
    {
      var url = "a.jsp?p=中文参数"; 
      url = encodeURI(url);
      open(url);
    }
    </script>
    <input type="button" value="JavaScript中文参数"
      onclick="openWindow();">
    以解决乱码问题。
    JavaScript中的open方法打开浏览器窗口,传递参数,其本质也是URL传参。一般方法4就可以很好的解决中文参数乱码问题。如果方法4不生效,才考虑方法六。 http://yxhcquedu.blog.163.com/blog/static/58705477200912115045374/
  • 相关阅读:
    想不明白为什么不复用老接口?
    dubbo入门教程-从零搭建dubbo服务
    使用Node.js时如何引入jQuery
    博客园在我的博客添加点击小心心特效
    博客园在微信内置浏览器打开时添加微信赞赏码功能
    Keepalived
    双网卡服务器使用指定网卡互通不同网段数据
    LNMP详解
    Centos7数据实时同步(Rsync+inotify)
    解决Centos7本机时间与实际时间相差8小时
  • 原文地址:https://www.cnblogs.com/gates/p/3227578.html
Copyright © 2020-2023  润新知