【发布时间】:2012-04-13 21:01:38
【问题描述】:
当文件名有重音符号时,由于字符集不匹配,尝试打开一个文件时它指出找不到该文件。 我在 linux 系统上使用 UTF-8(/etc/locales 也设置了 UTF-8)。使用 -Dfile.encoding=UTF-8 和环境变量 JBOSS_ENCODING="UTF-8" 运行 jboss
通过 JSP,我得到了文件名:
String fileName = element.getChildText("FileName");
out.println("File to be opened : " + filename);
显示:
要打开的文件:aaaaa.txt
但是,新的 File(fileName) 不起作用。只是 file.exists() 是假的。
尝试:
File[] files = dir.listFiles();
for (int i=0; i<files.length; i++){
out.println(fileName);
我明白了:aaaaà .txt
为什么它会读取并尝试打开将 HDD 中的文件获取为 ISO-8859-1 的文件? 它是 JBoss 配置吗?一个java配置?如何强制 java.io.File 使用 UTF-8 作为文件名字符集读取文件?
我用过其他工具,名字总是读得很好,使用 UTF-8。
(注意我总是在谈论文件名,而不是内容,它可能是一个空文件)
【问题讨论】:
-
-Dfile.encoding=UTF-8是特定于 Sun/Oracle JVM 的。你用的是什么JVM?即便如此,你毕竟根本不应该使用这个论点。 -
@BalusC:我不确定你的意思。至少 IBM JVM 也支持“-Dfile.encoding”标签(我不确定今天有多少其他 JVM 正在认真使用)。
-
JVM 是Java Hotspot,反正符合评论
-
我在 Linux 上尝试过同样的方法,但也失败了。尽管我尝试了
LANG、LC_ALL、file.encoding和sun.jnu.encoding的所有组合,但Java 无法正确获取文件名,但均未成功。还有什么想法吗? -
没有更多的想法。似乎方法是轮询字符集并尝试每个人。