假设浏览器的header encoding是UTF-8,DiskFileUpload.setHeaderEncoding("UTF-8");
...
fileName=FileItem.getName();System.out.println(fileName);如果打印出来的fileName不会乱码,
那么剩下的任务就是Servlet与mysql之间的了。

解决方案 »

  1.   

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">没用utf-8
      

  2.   

    且在插入数据库前,中文文件名输出正常,只是插入进mysql中是乱码
      

  3.   

    >>且在插入数据库前,中文文件名输出正常,只是插入进mysql中是乱码你所设置的mysql的默认字符集编码是什么?我用的mysql的版本是4.1.10a,它支持utf8.在my.ini(在c:/my.ini或%windir%/my.ini,如果没有则自己弄一份到c:/下)中编辑,
    使得有如下代码(大概的,有些也许会写错,可以mysqld --verbose --help,
    mysql --help确认一下)[client]
    default-character-set=gbk
    [mysqld]
    character-set-server=utf8然后重新建库表,再试试。注意,通过jdbc for mysql指定 useUnicode=true&characterEncoding=UTF-8.
    这样直接从数据库读出来就可以了,不用再转码。
      

  4.   

    我是在server.xml中配的数据库连接池,没法设useUnicode=true&characterEncoding=UTF-8.
    通过jndi找数据库的连接,<Resource name="jdbc/user"
                   auth="Container"
                   type="javax.sql.DataSource"/>
      <ResourceParams name="jdbc/user">
        <parameter>
          <name>factory</name>
        <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
        </parameter>
        <!-- Maximum number of dB connections in pool. Make sure you
             configure your mysqld max_connections large enough to handle
             all of your db connections. Set to 0 for no limit.
             -->
        <parameter>
          <name>maxActive</name>
          <value>100</value>
        </parameter>
        <!-- Maximum number of idle dB connections to retain in pool.
             Set to 0 for no limit.
             -->
        <parameter>
          <name>maxIdle</name>
          <value>30</value>
        </parameter>
        <!-- Maximum time to wait for a dB connection to become available
             in ms, in this example 10 seconds. An Exception is thrown if
             this timeout is exceeded.  Set to -1 to wait indefinitely.
             -->
        <parameter>
          <name>maxWait</name>
          <value>10000</value>
        </parameter>
        <!-- MySQL dB username and password for dB connections  -->
        <parameter>
         <name>username</name>
         <value>root</value>
        </parameter>
        <parameter>
         <name>password</name>
         <value>jing6699</value>
        </parameter>
        <!-- Class name for mm.mysql JDBC driver -->
        <parameter>
           <name>driverClassName</name>
           <value>org.gjt.mm.mysql.Driver</value>
        </parameter>
       
       <parameter>
          <name>url</name> <value>jdbc:mysql://localhost:3306/user?autoReconnect=true</value>
        </parameter>
      </ResourceParams>我将jdbc:mysql://localhost:3306/user?autoReconnect=true换成jdbc:mysql://localhost:3306/user?autoReconnect=true&useUnicode=true&characterEncoding=gb2312后,tomcat就启不来了,
      

  5.   

    C:\mysql\bin>mysqld --verbose --help
    mysqld: ERROR: unknown variable 'character-set-server=utf8'