【发布时间】:2011-05-24 22:21:57
【问题描述】:
我必须读取一些文件的名称并将它们作为字符串放入列表中。没那么难我只是有一些像ä,ö,ü这样的字符的问题......它们总是作为'?在我的字符串中。
有什么问题?那么编码。好的,这应该很容易......这就是我的想法。所以我尝试使用如下功能:
new String(insert.getBytes("UTF-8")
要么
new String(insert.getBytes("ISO-8859-1"), "UTF-8")
因为大部分文件都是 ISO-8859-1
它没有帮助。这是我的代码:
...
File[] fileList = dir.listFiles();
String insert;
for(File f : fileList) {
...
insert=f.getName().substring(0,f.getName().length()-4);
insert=insert.charAt(0)+insert.substring(1,insert.length()).toLowerCase().replaceFirst("([0-9]*(_s?(i)?(_dat)?)*$)", "").replaceFirst("_", " ");
...
System.out.println("test UTF8: " + new String(insert.getBytes("UTF-8"))); //not helping
System.out.println("test ISO , UTF8: " + new String(insert.getBytes("ISO-8859-1"), "UTF-8")); //not helping
...
names.add(insert);
}
最后有很多带有 '?' 的字符串我列表中的字符。 如何解决问题?如果不仅有 ISO-8859-1 文件,那么最好的方法是什么? (假设有很多未知的编码文件)
谢谢!
【问题讨论】:
-
您是从磁盘还是从其他文件读取文件名?有一个首选的 OS 文件名编码,但如果你从一个编码未知的文件中获取它,你可能会遇到麻烦。
-
如果您可以读取具有某种编码(正确的)的文件并将它们写回磁盘并且您没有收到奇怪的字符,那么您的编码处理就很好。在这种情况下,只是您的控制台没有显示字符。
-
@mdrg:嗯,有一个问题。我必须读取文件的名称,然后将它们放入数据库。还有很多“?” ,那不应该是……
-
@Lissy:不,你误会了。磁盘有正确的文件名,程序有正确的文件名,数据库甚至可能有正确的文件名,但是当您将文件名打印到屏幕上时,您的屏幕可能没有显示正确的字符。当然,如果
ls显示它并且yourprogram显示问号,那是你的程序有问题。顺便说一句,你在什么操作系统和文件系统上运行它? -
@Lissy:关键信息仍然缺失。当您在相关文件/目录上运行
ls时,它会报告什么?它打印特殊字符还是打印?也一样?