我正在编写一个在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,但这没有帮助。
干杯。
答案 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));