7

日本語の文字を含むディレクトリ/ファイルがいくつかあります。(例として) を含むファイル名 (内容ではない) を読み込もうとすると、� を含む文字列が返されます。クを含むファイル/ディレクトリを作成しようとすると、? を含むファイル/ディレクトリが表示されます。

例として:ファイルをリストします。

File file = new File(".");  
String[] filesAndDirs = file.list();

filesAndDirs 配列には、この特殊文字のディレクトリが含まれるようになりました。String には ���� のみが含まれるようになりました。a getbytes は、異なる文字であっても、ファイル名のすべての文字に対して「-17 -65 -67」しか表示しないため、デコードするものは何もありません。

MacOS 10.8.2 Java 7_10 と Netbeans を使用しています。

何か案は?

前もって感謝します :)

4

2 に答える 2

4

これらのバイトは 0xef 0xbf 0xbd です。これは、日本語の文字の代わりに表示されている \ufffd 文字の UTF-8 エンコード形式です。ファイルを一覧表示するために Java が使用している OS 機能は、実際にはこれらの誤った文字を返しているようです。

おそらく 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();
    }
}
于 2013-01-05T12:41:01.443 に答える