登录
首页 >  Golang >  Go问答

如何在处理 Unicode 文件名时准确识别文件名?

来源:stackoverflow

时间:2024-03-25 18:00:38 232浏览 收藏

在处理 Unicode 文件名时,准确识别文件名至关重要。然而,在 macOS 等操作系统上,不区分大小写的文件系统会导致意外行为。具体来说,某些 Unicode 字符(例如大写字母和变音符号)被视为相等,导致看似不同的文件名实际指向同一文件。因此,在编写代码时,需要考虑这种情况,以防止文件丢失或重写。

问题内容

我正在编写 go 代码,但我不相信它是独一无二的,所以让我们概括一下它。想象一下,用户通过 go 代码创建了三个具有三个不同 unicode 名称的文件。请注意文件名的最后一个字母是不同的。

  • καθέδρα.txt
  • καθέδρᾳ.txt
  • καθέδραι.txt

go中,这三个字符串是三个不同的唯一字符串。看起来,如果您尝试使用这三个名称创建三个文件,最终会得到两个文件保存到磁盘上。第二个和第三个文件名似乎被视为相同的文件。因此,当脚本写入三个用户创建的文件时,其中一个会“丢失”。

如果你写 καθέδρᾳ.txt 然后 καθέδραι.txt 你最终只会得到第一个文件名。

如果你写 καθέδραι.txt 然后 καθέδρᾳ.txt 你最终只会得到第一个文件名。

如何在 golang 中防范 unicode 中奇怪的 OS/X 文件名行为?它似乎认为两个不同的字符串是一个文件名。


正确答案


当您在 OS/X 上选择不区分大小写的文件系统时,不区分大小写的过程比我们的直觉预期更复杂。根据语言的不同,规则也不同。

  • 大写的 a 是 A(英文)。
  • I 的大写表示 ï 某些语言。
  • 显然 ᾳ 等于 αι。

除了检测文件系统类型之外,没有真正的方法可以防止这种情况。

防止该问题的跨平台方法是让您的软件写入一个文件并使用不同的“案例”读回该文件以检测问题是否存在。

今天关于《如何在处理 Unicode 文件名时准确识别文件名?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>