gpt4 book ai didi

Java - 区分unicode NFC和NFD中的文件

转载 作者:行者123 更新时间:2023-11-30 06:47:44 26 4
gpt4 key购买 nike

我有一个使用 Fuse for MacOS 制作的云支持文件系统。显然,该文件系统将使用不同 unicode 规范化形式的文件视为不同的文件。因此,您可以在 NFC 中拥有一个文件,在 NFD 中拥有另一个同名文件。

所以我的问题是,是否可以从Java中将这两个文件名读取为两个不同的字符串?原因File.getName() , File.getPath() , Path.getFileName()等似乎返回两个文件的 NFC 标准化字符串,因此认为它们是相等的。

最佳答案

所以我想我在写问题时找到了答案,看起来有一种方法可以以原始规范化形式获取文件名,那就是通过 Path.toUri()方法。有趣的是File.toURI()不做同样的事情。

这是一个有效的示例:

    Files.list(Paths.get("/path/to/my/folder"))
.filter(Files::isRegularFile)
.forEach((f) -> System.out.println(org.apache.commons.codec.binary.Hex.encodeHex(f.toUri().getPath().getBytes())));

但这里没有:

    File folder = new File("/path/to/my/folder");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
System.out.println(org.apache.commons.codec.binary.Hex.encodeHex(listOfFiles[i].toURI().getPath().getBytes()));
}
}

关于Java - 区分unicode NFC和NFD中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43380362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com