gpt4 book ai didi

java - HFS+ 文件系统上 Java 类名称中的非 ASCII 字符

转载 作者:太空狗 更新时间:2023-10-29 14:14:08 25 4
gpt4 key购买 nike

根据JLS ,如果主机文件系统不支持 Unicode,则可以“破坏”包含非 ASCII 字符的包名称。例如,包 é 变成 @00e9papierMâché 投影到文件时变成 papierM@00e2ch@00e9系统。

问题是:是否有可能对 Java 源文件(其名称必须与相应的 Java 类名称一致)实现同样的效果?

问题的背景是我需要在我的公共(public)类名('é''\u00e9')中有一个带尖音符的重音 e。 是的,我知道我不应该,文件名中的 Unicode 是一种不当行为,但我仍然需要它。

但是,无论是 Mac OS X 还是底层的 HFS+ 文件系统都不允许文件名中的这个字符,将其替换为“e”,紧接着是 COMBINING ACUTE ACCENT (“e\u0301”)。此行为与 NTFS 或 ext3/ext4 完全不同,其中名为 "\u00e9""e\u0301" 的两个文件可以共存于同一目录中(测试存储库是 here )。

上述 HFS+ 行为导致 2 个问题:

  1. 我无法用 javac 编译我的类,因为类名和文件名不一样(虽然我能够编译它们Mavenecj)。
  2. 我无法使用 Git 管理我的类(class),因为它总是报告文件已重命名:

.

$ git status .
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# "src/main/java/com/intersystems/persistence/Cache\314\201ExtremeConnectionParameters.java"
# "src/main/java/com/intersystems/persistence/Cache\314\201ExtremePersister.java"
# "src/main/java/com/intersystems/persistence/Cache\314\201JdbcConnectionParameters.java"
# "src/main/java/com/intersystems/persistence/Cache\314\201JdbcPersister.java"
# "src/main/java/com/intersystems/persistence/ui/Cache\314\201JdbcConnectionParametersPanel.java"
nothing added to commit but untracked files present (use "git add" to track)

最佳答案

如果您希望您的名称​​ASCII 安全,那么您可以将您的java 文件命名为papierM@00e2ch@00e9.java。 ,并确保它在任何其他类尝试引用它之前得到编译。这会起作用,因为 <filename>.java 不需要必须是 <classname>.java , 然而这是常见的做法,编译器不会尝试编译 ClassA来自 ADifferentFilename.java ,出于显而易见的原因。但是,如果 ADifferentFilename.java已经编译为 ClassA.class , 那么它将起作用。

除此之外,您在以纯 ASCII 命名文件方面运气不佳。

顺便说一句,您提到您已经使用 .gitignore 解决了 git 问题文件,但是您可能会发现更好的方法是 enable the precomposeunicode option in git .

git config --global core.precomposeunicode true

如果你使用它,那么你应该能够拥有你的文件 papierMâché.java并从所有 Linux、Mac 和 Windows 访问它。

关于java - HFS+ 文件系统上 Java 类名称中的非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18866947/

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