• springmvc乱码问题


    在web.xml中加入

    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>    
                <param-name>forceEncoding</param-name>    
                <param-value>true</param-value>    
            </init-param> 
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    最好放在filter中第一个,相当于执行request.setCharacterEncoding(this.encoding); 



    1.存文件必须以一种编码存;读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码。

    2.从.java->.class过程是,先编写.java文件并按一种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则要带encoding参数指明实际编码,否则出错,生成的.class文件存为系统默认编码。

    3.从.jsp->.java->.class,先存为某种编码的.jsp文件,然后tomcat根据pageEncoding读取并转化为servlet存为系统默认编码,然后同上面.java->.class过程。

    4.IDE的encoding为对系统下文件打开的解码方式或保存的编码方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,则eclipse会自动存为UTF-8方式。

    5.contentType="text/html;charset=UTF-8"表示当浏览器得到此文件时以什么方式解码

    6.response.setCharacterEncoding("UTF-8")可以把页面中的<%@ page contentType="text/html;charset=iso8859-1"%>换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。

    7.表单提交:无论何种表单提交都可以在后台的java文件中通过String des = new String(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。

    8.get 

    a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用 
    new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK") 取出

    b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的 
    content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中: 
    <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 --> 
    <Connector port="8080" 
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
    enableLookups="false" redirectPort="8443" acceptCount="100" 
    debug="0" connectionTimeout="20000" useBodyEncodingForURI="true" 
    disableUploadTimeout="true" /> 

    加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容. 
    如果content="text/html; charset=GBK",需用 
    new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK") 
    取出,其他情况类似. 

    总结: 
    1,所有页面使用utf8编码, 
    2,服务器加上过滤器, 
    3,server.xml中不要使用 
    <Valve className="org.apache.catalina.valves.RequestDumperValve"/> 
    4,在tomcat的confserver.xml里找到port="8080"的Connector标签,加上useBodyEncodingForURI="true" 
    这样应该可以搞定大多数前台的中文问题.至于地址栏输入中文,不支持也罢,一般的程序很少要求 
    从这里输入.


    第六,连接数据库 

    1、mysql配置文件:
    修改mysql在windowsmy.ini里default-character-set=utf-8

    2、mysql里数据库和表也都设为utf8_unicode_ci

    3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8

    对于Web容器来说,如果你不设置,默认是ISO8859-1
    String des = new String(s.getBytes("iso8859-1"),"UTF-8");都可以使用这个 不论哪里,有乱码就是用

  • 相关阅读:
    MongoVUE破解方法(转)
    Apache和IIS共享80端口,支持多域名
    让作业飞吧,与屌丝兄弟们分享我的分布式作业调度平台 【拥抱开源,拥抱作业调度的神器Quartz.net】
    关于Nbearlite 访问PostgreSql,MySql,Sqlite的Bug
    php5.4.6/5.3.16/5.2.17安装(In windows),配置(转)
    MSSQL翻页存储过程
    话说客户端连接mongoDB的连接参数(转载)
    关于Windows频繁打开关闭端口时出现的问题(转至老赵)
    zeromq的几种模式(转)
    如何设置代理服务器上网
  • 原文地址:https://www.cnblogs.com/tuifeideyouran/p/4564207.html
Copyright © 2020-2023  润新知