java read write unicode/UTF-8 filenames(not contents)

uti*_*vel 7 java macos filenames encoding

我有一些日文字符的目录/文件.如果我尝试读取包含(例如)的文件名(不是内容),则我收到包含 的字符串.如果我尝试创建一个包含ク的文件/目录,则显示包含?的文件/目录.

例如:我列出了文件.

File file = new File(".");  
String[] filesAndDirs = file.list();
Run Code Online (Sandbox Code Playgroud)

filesAndDirs数组现在包含这个特殊字符的目录.String现在只包含 .接缝没有什么可解码的,因为即使对于不同的字符,a getbytes也只显示文件名中每个字符的"-17 -65 -67".

我使用MacOS 10.8.2 Java 7_10和Netbeans.

有任何想法吗?

先感谢您 :)

VGR*_*VGR 4

这些字节是 0xef 0xbf 0xbd,这是您看到的 \ufffd 字符的 UTF-8 编码形式,而不是日语字符。看起来 Java 使用的任何操作系统函数来列出文件实际上都返回了那些不正确的字符。

也许 Files.newDirectoryStream 会更可靠。试试这个:

try (DirectoryStream<Path> dir = Files.newDirectoryStream(Paths.get("."))) {
    for (Path child : dir) {
        String filename = child.getFileName().toString();

        System.out.println("name=" + filename);
        for (char c : filename.toCharArray()) {
            System.out.printf("%04x ", (int) c);
        }
        System.out.println();
    }
}
Run Code Online (Sandbox Code Playgroud)