根据JLS,如果主机文件系统不支持 Unicode,则可以“修改”包含非 ASCII 字符的包名称。例如,包é
变为@00e9
,并且在投影到文件系统时papierMâché
变为。papierM@00e2ch@00e9
问题是:对于 Java 源文件(其名称必须与 Java 类的相应名称一致)是否有可能实现相同的目标?
问题的背景是我需要在我的公共类名('é'
,'\u00e9'
)中有一个带有尖锐的重音 e。是的,我知道我不应该,文件名中的 Unicode 是一种弊端,但我仍然需要它。
但是,无论是 Mac OS X 还是底层 HFS+ 文件系统都不允许在文件名中使用这个字符,而是将其替换为 'e' 后跟COMBINING ACUTE ACCENT
( "e\u0301"
)。这种行为与 NTFS 或 ext3/ext4 完全不同,在 NTFS 或 ext3/ext4 中,两个文件命名"\u00e9"
并"e\u0301"
可以共存于同一目录中(测试存储库在此处)。
上述 HFS+ 行为导致 2 个问题:
- 我无法编译我的类,
javac
因为类名和文件名不一样(尽管我可以使用Maven或ecj编译它们)。 - 我不能用Git管理我的课程,因为它总是报告文件已被重命名:
.
$ 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)