我有一些日文字符的目录/文件。如果我尝试读取包含(例如)的文件名(不是内容),则我收到包含 的字符串。如果我尝试创建一个包含ク文件/目录的文件/目录,则显示包含?。
例如: 我列出了文件。
File file = new File(".");
String[] filesAndDirs = file.list();
filesAndDirs数组现在包含这个特殊字符的目录。 String现在只包含 。接缝没有什么可解码的,因为即使对于不同的字符,a getbytes也只显示文件名中每个字符的“-17 -65 -67”。
我使用的是MacOS 10.8.2 Java 7_10和Netbeans。
有什么想法吗?
提前谢谢你:)
答案 0 :(得分:3)
这些字节是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();
}
}
答案 1 :(得分:2)
这是旧java文件api中的一个错误(可能只是在mac上)。无论如何,它都是在新的java.nio中修复的。
我有几个文件包含文件名和内容中的unicode字符,无法使用java.io.File和相关类加载。转换我的所有代码后使用java.nio.Path一切开始工作。我用java.nio.Files替换了org.apache.commons.io.FileUtils(它有同样的问题)......
...并确保使用适当的字符集读取和写入文件内容,例如:Files.readAllLines(myPath,StandardCharsets.UTF_8)