java读写unicode / UTF

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

例如:我列出了文件。

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

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

我使用的是MacOS 10.8.2 Java 7_10和Netbeans。

有任何想法吗?

先谢谢你 :)


这些字节是0xef 0xbf 0xbd,它是您正在看到的 ufffd字符的UTF-8编码形式,而不是日文字符。 它看起来无论用什么操作系统功能来列出文件实际上都是返回那些不正确的字符。

也许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();
    }
}

这是旧的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)

链接地址: http://www.djcxy.com/p/68167.html

上一篇: java read write unicode / UTF

下一篇: using motion on raspberry pi for webcam streaming issue