此问题涉及连接到 MySQL (5.5.16) 数据库的 Tomcat 7 Web 应用程序。
当我打开一个zip
文件时,文件名以windows-1252
字符集编码,Java 似乎正确解释了这些字符:
ZipFile zf = new ZipFile( zipFile, Charset.forName( "windows-1252" ) );
Enumeration entries = zf.entries();
while( entries.hasMoreElements() ) {
ZipEntry ze = ( ZipEntry ) entries.nextElement();
if( ! ze.isDirectory() ) {
String name = ze.getName();
System.out.println( name ); //prints correct filenames, e.g. café.pdf
}
}
在 ZipFile 构造函数中省略 Charset 对象会导致异常。zip 文件中的文件名正确打印到标准输出,包括变音符号。但是,当我随后尝试将文件名存储在数据库中时,e-acute 被替换为问号(如 mysql 控制台客户端所示)。我之前将 Web 应用程序中的特殊字符插入 MySQL 没有问题。
é
当我在 Java 源代码中执行 INSERT 时:
statement.executeUpdate( "insert into files (filename) values ('café.pdf')" );
在é
MySQL 中显示良好。
此外,我的日志文件显示逗号而不是é: caf‚.pfd
有谁知道这里会发生什么?