java文件名解码_java – 获取文件名为UTF-8? (ä,ü,ö……总是’?’)

我必须读取一些文件的名称,并将它们作为字符串放在列表中.它不是那么难我只是对ä,ö,ü等一些人物有一些问题…他们总是像’?’在我的字符串中.

有什么问题?那么编码.好吧,这应该很容易……这就是我的想法.所以我尝试使用如下函数:

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文件,那么最好的方法是什么? (假设有很多未知的编码文件)

谢谢!

解决方法:

鉴于在该问题下来回扩展的评论,现在看起来这可能是字体问题或(或许更可能)文件名编码问题.

我让Lissy运行以下命令让我们弄清问题是什么.如果她确定文件名中包含“ä”,但是当她使用文件名时该字符没有出现,则此命令将告诉我们这是字体还是编码问题.

touch filenäme

ls filen*me

如果这在ls的输出中显示“filenäme”,那么我们知道问题在于将文件创建/复制到该系统上.如果创建文件的程序没有意识到文件系统编码是什么,或者为了做正确的事情太愚蠢,就会发生这种情况. convmv程序可能是解决这个问题的最佳方法.

convmv -f ENCODING -t utf8 -r .

问题是什么是正确的编码.可能性包括UTF-16,cp850或iso8859-1. convmv –list将显示当前已知(对您的系统)编码的列表.由于上面列出的命令只显示它可能会执行的操作,因此可以安全地使用不同的编码运行多次,直到找到适用于所有文件的命令.

如果这是一个字体问题,我们将不得不调查

标签:java,encoding,utf-8

来源: https://codeday.me/bug/20190621/1254661.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值