我运行嵌入式Linux平台上的一个小的Java应用程序。 与OpenJDK的替代Java虚拟机JamVM后,有特殊字符的文件名不正确保存。 特殊字符,如变音符号被替换为问号。
这里是我的测试代码:
import java.io.File;
import java.io.IOException;
public class FilenameEncoding
{
public static void main (String[] args) {
String name = "umlaute-äöü";
System.out.println("\nname = " + name);
System.out.print("name in Bytes: ");
for (byte b : name.getBytes()) {
System.out.print(Integer.toHexString(b & 255) + " ");
}
System.out.println();
try {
File f = new File(name);
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行它提供了以下的输出:
name = umlaute-???
name in Bytes: 75 6d 6c 61 75 74 65 2d 3f 3f 3f
和文件名为umlaute - ??? 被建造。
设置属性的file.encoding和sun.jnu.encoding为UTF-8给出了在终端正确的字符串,但所创建的文件仍然是umlaute - ???
与strace的运行虚拟机,我可以看到系统调用
open("umlaute-???", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0666) = 4
这说明,这个问题是不是文件系统的问题,但虚拟机之一。
如何可以将文件名的编码设置?