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

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

例如:我列出了文件。

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

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

我使用MacOS 10.8.2 Java 7_10和Netbeans。

有任何想法吗?

先感谢您 :)

这些字节是0xef 0xbf 0xbd,这是你看到的\ ufffd字符的UTF-8编码forms,而不是日文字符。 看来,用于列出文件的Java函数实际上是返回那些不正确的字符。

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

 try (DirectoryStream 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(); } } 

这是旧的Java文件api中的一个错误(可能只是在mac上)。 无论如何,它都是在新的java.nio中修复的。

我有几个文件包含文件名中的unicode字符和无法使用java.io.File和相关类加载的内容。 转换我的所有代码后使用java.nio.Path EVERYTHING开始工作。 我用java.nio.Files替换了org.apache.commons.io.FileUtils(它有同样的问题)…

…并确保使用适当的字符集读取和写入文件内容,例如:Files.readAllLines(myPath,StandardCharsets.UTF_8)