zoukankan      html  css  js  c++  java
  • jsp中文乱码处理

    JSP中文乱码

    1,最基本的乱码问题。
    这个乱码问题是最简单的乱码问题。一般新手会出现。就是页面编码不一致导致的乱码。
    <%@ page language="java"  pageEncoding="gbk" %>
    <%@ page  
    contentType="text/html;charset= gbk " %>
    <html>
    <head>
    <title>
    中文问题</title>
    <meta http-equiv="Content-Type" content="text/html; charset= gbk ">
    </head>
    </head>
    <body>
    我是个好人
    </body>
    </html>
    以上红色字体,这三个部分的编码格式必须一致,否则会出现乱码

    2、表单使用Post方式提交后接收到的乱码问题
    这 个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则 会以iso8859-1方式进行提交,接受的jsp却以GBK的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。
    A)接受参数时进行编码转换
    String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
    ; 这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。
    B)在请求页面上开始处,执行请求的编码代码- request.setCharacterEncoding("GBK")
    这个方法也就对post提交的有效 果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。
    C为了避免每页都要写request.setCharacterEncoding("GBK "),建议使用过滤器对所有jsp
    Java
    代码
    CharacterEncodingFilter.java:

    public class CharacterEncodingFilter implements Filter
    {

    protected String encoding = null;

    public void init(FilterConfig filterConfig) throws ServletException
    {
    this.encoding = filterConfig.getInitParameter("encoding");
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
    request.setCharacterEncoding(encoding);
    response.setContentType("text/html;charset="+encoding);
    chain.doFilter(request, response);
    }

    }

    web.xml:

    <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>net.vschool.web.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>GBK</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>


    3Get方法的处理,url传递中文
    tomcat
    postget的处理方法不一样,所以过滤器不能解决get的乱码问题,它需要在其他地方设置。
    打开
    <tomcat_home>/conf目录下server.xml文件,找到对8080端口进行服务的Connector组件的设置部分,给这个组件添加一个属性:URIEncoding="GBK"。修改后的Connector设置为:

    <Connector port="8080"
    …………………………………….
    URIEncoding="GBK" />
    * 注意修改后重新启动tomcat才能起作用。


    4, 上传文件时的乱码解决
    上传文件时,form表单设置的都是enctype="multipart/form-data"。这种方式以流方式提交文件。如果使用apach的上传 组件,会发现有很多乱码想象。这是因为apach的先期commons-fileupload.jarbug,取出汉字后进行解码,因为这种方式提交, 编码又自动使用的是tomcat缺省编码格式iso-8859-1。但出现的乱码问题是: 句号,逗号,等特殊符号变成了乱码,汉字如果数量为奇数,则会出现乱码,偶数则解析正常。
    解决方式:
    下载commons-fileupload-1.1.1.jar 这个版本的jar已经解决了这些bug
    但是取出内容时仍然需要对取出的字符进行从
    iso8859-1utf-8转码。已经能得到正常所有汉字以及字符。


    5、数据库乱码
    这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:
    在数据库连接字符串中加入编码字符集
    String Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GBK";
    并在页面中使用如下代码:
    response.setContentType("text/html;charset=gbk");
    request.setCharacterEncoding("gbk ");

  • 相关阅读:
    NYOJ 625 笨蛋的难题(二)
    NYOJ 102 次方求模
    ZJU Least Common Multiple
    ZJUOJ 1073 Round and Round We Go
    NYOJ 709 异形卵
    HDU 1279 验证角谷猜想
    BNUOJ 1015 信息战(一)——加密程序
    HDU 1202 The calculation of GPA
    "蓝桥杯“基础练习:字母图形
    "蓝桥杯“基础练习:数列特征
  • 原文地址:https://www.cnblogs.com/zdcaolei/p/2122962.html
Copyright © 2011-2022 走看看