我正在编写 go
代码,但我不相信它是独一无二的,所以让我们概括一下它。想象一下,用户通过 go 代码创建了三个具有三个不同 unicode 名称的文件。请注意文件名的最后一个字母是不同的。
καθέδρα.txt
καθέδρᾳ.txt
καθέδραι.txt
在go
中,这三个字符串是三个不同的唯一字符串。看起来,如果您尝试使用这三个名称创建三个文件,最终会得到两个文件保存到磁盘上。第二个和第三个文件名似乎被视为相同的文件。因此,当脚本写入三个用户创建的文件时,其中一个会“丢失”。
如果你写 καθέδρᾳ.txt
然后 καθέδραι.txt
你最终只会得到第一个文件名。
如果你写 καθέδραι.txt
然后 καθέδρᾳ.txt
你最终只会得到第一个文件名。
如何在 golang 中防范 unicode 中奇怪的 OS/X 文件名行为?它似乎认为两个不同的字符串是一个文件名。
当您在 OS/X 上选择不区分大小写的文件系统时,不区分大小写的过程比我们的直觉预期更复杂。根据语言的不同,规则也不同。
除了检测文件系统类型之外,没有真正的方法可以防止这种情况。
防止该问题的跨平台方法是让您的软件写入一个文件并使用不同的“案例”读回该文件以检测问题是否存在。