Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java读写unicode/UTF-8文件名(非内容)_Java_Macos_Encoding_Filenames - Fatal编程技术网

java读写unicode/UTF-8文件名(非内容)

java读写unicode/UTF-8文件名(非内容),java,macos,encoding,filenames,Java,Macos,Encoding,Filenames,我有一些带有日语字符的目录/文件。如果我试图读取包含(例如)一个ク 我收到一个包含�. 如果我尝试创建一个包含ク 此时会出现一个包含?的文件/目录 例如: 我把文件列在一起 File file = new File("."); String[] filesAndDirs = file.list(); filesAndDirs数组现在包含此特殊字符的目录。字符串现在只包含����. 没有什么可解码的,因为对于文件名中的每个字符,即使是不同的字符,getbytes也只显示“-17-65-67”

我有一些带有日语字符的目录/文件。如果我试图读取包含(例如)一个ク 我收到一个包含�. 如果我尝试创建一个包含ク 此时会出现一个包含?的文件/目录

例如: 我把文件列在一起

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编码形式,而不是日语字符。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();
    }
}
try(DirectoryStream dir=Files.newDirectoryStream(path.get(“.”)){
for(路径子项:dir){
字符串文件名=child.getFileName().toString();
System.out.println(“name=“+filename”);
for(char c:filename.toCharArray()){
System.out.printf(“%04x”,(int)c);
}
System.out.println();
}
}

这是旧java文件api中的一个bug(可能只是在mac上)。无论如何,它在新的java.nio中都是固定的

我有几个文件的文件名和内容中包含unicode字符,无法使用java.io.File和相关类加载。在将所有代码转换为使用后,一切都开始工作。我将org.apache.commons.io.FileUtils(也有同样的问题)替换为


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

不清楚如何显示这些文件名,也不清楚是否为
String.getBytes()
提供编码(您总是应该这样做)。您应该转储文件名中每个字符的UTF-16代码点,以查看实际情况。此外,还不清楚在尝试创建文件时如何获取输入数据。
getBytes
返回似乎有效的内容UTF8@Jan是的,它看起来像是有效的UT8,但是getBytes为每个字符返回“-17-65-67”。但并非文件/目录名中的所有字符都相同。似乎我丢失了操作系统和JavaVM之间的所有信息。对每个特殊字符重复“-17-65-67”。[a-zA-Z…]按预期返回。我至少希望每个字符有不同的字节。也许它对每个字符都是有效的UTF8�?像魔咒一样工作:)。现在我只需要了解如何创建具有特殊字符的文件和文件夹。非常感谢你!查看javadoc中的
文件
类。它有办法做所有这些事情。