文件名为UTF-8的Java文件

时间:2017-04-10 18:45:36

标签: java file utf-8 character-encoding

我正在编写一个在Tomcat上运行的Web应用程序。

在这个Web应用程序中,我想创建/保存这样的文件:

File destFile = new File(path + "/" + fileName);
destFile.createNewFile();

现在棘手的是fileName是一个UTF-8编码的字符串。不幸的是,所有UTF-8字符(如德语变音符号)都被“?”取代在实际创建的文件名称中。

所以fileName“hellö.txt”以“hell?.txt”结尾。

我该如何解决这个问题?

我在Ubuntu 14.04服务器上运行,据我所知,一切都设置为支持UTF-8。

我已将-Dfile.encoding=UTF8添加到JAVA_OPTS,但这没有帮助。

干杯。

2 个答案:

答案 0 :(得分:1)

解决!

在我的情况下,它不是Java错误。相反,我的服务器上的区域设置被破坏了。修好后,如https://askubuntu.com/questions/162391/how-do-i-fix-my-locale-issue所述,现在即使使用java.io.File也可以使用。

答案 1 :(得分:-1)

即使有可能,我也不确定,在文件名中添加'ö','ä'这样的字符是一种非常糟糕的做法。相反,您应该用他们的同义词'oe'或'ae'替换它们。

我为“德语变音符号”写了一个基本功能

string removeBadCharacters(String string) {
    string = string.replace("ö", "oe");
    string = string.replace("ä", "ae");
    string = string.replace("ü", "ue");
    string = string.replace("ß", "ss");
    return string;
}

然后只需传递你的fileName并使用格式化的字符串:

File destFile = new File(path + "/" + removeBadCharacters(fileName));