zoukankan      html  css  js  c++  java
  • 12.17

        处理乱码

         可以使用标准标签库中的相应标签处理乱码:首先声明要使用的标准标签库,之后调用标准标签库中的相应标签即可。
    声明标准标签库:
               <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    使用标准标签库中的标签进行处理,代码如下:
            <fmt:requestEncoding value="GB2312"/>
    下面介绍标准标签库的用法。
             标准标签库(JSTL)是一组能够方便用户操作的标签,能够完成很多常用的功能。JSTL在刚开始时是作为一个开源项目供大家使用的,在 JSP 2.0 之后,JSTL 已经成为 JSP 的一部分。
            标准标签库是根据 JSP 提供的自定义标签机制完成的。自定义标签能够把一些处理功能封装起来,其使用与普通的 JSP 标签一样简单。标准标签库的用法与所有的自定义标签库的用法完全相同。
    要使用自定义标签库中的标签,需执行如下几个过程:
                ● 编写标签库。
                ● 部署标签库。
                ● 使用 taglib 指令声明要使用的标签库。
                ● 访问标签库中的标签。

    出现乱码的地方可以归结为三类:1.基本jsp页面显示乱码,2.表单提交乱码,3.数据库乱码

    1.基本jsp页面显示乱码

            这种情况比较简一般只有初学者会出现,原因是因为jsp页面保存,转换时的编码与浏览器解析的编码不一样。这里涉及到三个解决方案

                1).<%@ page language="java" pageEncoding="UTF-8"%>  我们都知道,jsp就是servlet,jsp会转换成servlet之后转换为相关的java代码再发给客户端。

                    那么jsp中就需要有语句可以控制jsp是以什么编码转换为servlet的。上述编码就是控制,jsp以UTF-8的编码方式保存,也就是说以UTF-8的编码方式转换成servlet。

               2).<%@ page contentType="text/html;charset=UTF-8"%> 熟悉HTTP协议的朋友都不陌生这一句代码,charset="UTF-8",就是设置响应头编码方式为UTF-8。

               3).<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 同上一句代码,只不过这一句使用HTML控制浏览器解析方式。

    示例:

    我们在一个简单的jsp页面中写下这样的代码,页面中有汉字,却默认pageEncoding="iso8859-1"

    复制代码
    复制代码
    <%@ page language="java" import="java.util.*" pageEncoding="iso8859-1"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      <body>
            <form action="encoding.jsp" method="get">
                username:<input type="text" name="name" /><br>
                性别:<input type="text" name="sex" /><br>
                <input type="submit" value="submit" />
            </form>
      </body>
    </html>
    复制代码
    复制代码

    页面显示:

    HTTP报文请求头:

    大家只要按照上述修改响应时的默认编码即可。

    2.表单提交乱码

    我们在使用表单提交中文时也会出现乱码,原因就是Tomcat服务器内部编码默认是iso8859-1,Tomcat会以编码的缺省方式利用iso8859-1来解析中文。

    表单get方式提交时,服务器会用默认的编码对提交的数据进行解析,并添加到url后面传到下一个页面。

    解决方法:在Tomcat 服务器的server.xml文件中进行配置,在Connector节点中加入useBodyEncodingForURI="true"  URIEncoding=”UTF-8”,这样接收页面就会利用UTF-8进行解码了。

    表单post方式提交时,提交的数据不再加入到url中,我们可以在web应用中添加一个servlet过滤器来设置编码统一(servlet过滤器会在访问设置的相关url之前执行)。

    过滤器相关代码:

    复制代码
    复制代码
    public class ConvertEncoding implements Filter {
    
        private String encoding;
        @Override
        public void destroy() {
        }
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp,
                FilterChain chain) throws IOException, ServletException {
            req.setCharacterEncoding(encoding);//设置请求编码
            resp.setContentType("text/html;charset="+encoding);//设置响应编码
            chain.doFilter(req,resp);
        }
    
        @Override
        public void init(FilterConfig config) throws ServletException {
            this.encoding = config.getInitParameter("encoding");//读取默认编码
        }
    
    }
    复制代码
    复制代码

    相关配置web.xml:

    复制代码
    <filter>
            <filter-name>Encoding</filter-name>
            <filter-class>Filters.ConvertEncoding</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
        </filter>
    
    
        <filter-mapping>
            <filter-name>Encoding</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    复制代码

    这样我们会发现即使是post方式提交的数据,也不会出现乱码情况。、

    3.数据库乱码

    对于大多数数据库的JDBC驱动程序,在Java程序和数据库之间传递数据都是以ISO8859-1为默认编码格式,所以,在程序中向数据库存储包含中 文的数据时,驱动程序受限把程序内部Unicode编码格式的数据转换为ISO8859-1编码,然后传递到数据库中,如果要解决数据库乱码问题,最简单的就是更改数据库默认编码格式。

  • 相关阅读:
    ntohs, ntohl, htons,htonl的比较和详解【转】
    Device Tree 详解【转】
    浅析Linux DeviceTree【转】
    【spring boot】spring boot 拦截器
    【jQuery】jQuery/js 判断字符串是否JSON字符串
    【java】java中的 &= 和 |= 和 ^= 的区别
    zabbix创建触发器、action,发送报警邮件
    html iframe禁用右键
    mysql数据库mysqldump方式备份
    JDK8新特性
  • 原文地址:https://www.cnblogs.com/1329197745a/p/14162270.html
Copyright © 2011-2022 走看看