[返回首页] - [索引页面] - [文章列表]


主题:用commons-upload组件上传时,中文文件名出现乱码????????????????



哪位高人知道用commons-upload组件上传时,中文文件名插入mysql数据库中出现乱码,怎么办?????:?
用temp=filename.getBytes("iso-8859-1");

在插入前做转换,还是插入后显示时,转换就不好使!!!!!!!!


回复人:Banned(bannedlqd@hotmail.com)  三级(初级)  信誉:105      2005-4-8 15:42:13  得分:2

假设浏览器的header encoding是UTF-8,

DiskFileUpload.setHeaderEncoding("UTF-8");
...
fileName=FileItem.getName();

System.out.println(fileName);

如果打印出来的fileName不会乱码,
那么剩下的任务就是Servlet与mysql之间的了。
TOP
回复人:java_jing(梦鸟)  二级(初级)  信誉:100      2005-4-8 16:52:20  得分:0

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

没用utf-8
TOP
回复人:java_jing(梦鸟)  二级(初级)  信誉:100      2005-4-8 16:55:17  得分:0

且在插入数据库前,中文文件名输出正常,只是插入进mysql中是乱码
TOP
回复人:yxhzj(余华[学习J2EE中])  四级(中级)  信誉:100      2005-4-8 17:15:04  得分:3

你在编码一次.
TOP
回复人:Banned(bannedlqd@hotmail.com)  三级(初级)  信誉:105      2005-4-8 19:53:37  得分:15

>>且在插入数据库前,中文文件名输出正常,只是插入进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.
这样直接从数据库读出来就可以了,不用再转码。
TOP
回复人:java_jing(梦鸟)  二级(初级)  信誉:100      2005-4-11 9:08:02  得分:0

我是在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就启不来了,


TOP
回复人:java_jing(梦鸟)  二级(初级)  信誉:100      2005-4-11 9:08:30  得分:0

大家帮帮忙
TOP
回复人:java_jing(梦鸟)  二级(初级)  信誉:100      2005-4-11 10:41:07  得分:0

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


该问题已经结贴 ,得分记录:Banned(2)、yxhzj(3)、Banned(15)、