Java HFS+;文件系统
根据,在主机文件系统不支持Unicode的情况下,可能会“破坏”包含非ASCII字符的包名。例如,包Java HFS+;文件系统,java,macos,git,jls,hfs+,Java,Macos,Git,Jls,Hfs+,根据,在主机文件系统不支持Unicode的情况下,可能会“破坏”包含非ASCII字符的包名。例如,包é变成@00e9,而papierM–ché变成papierM@00e2ch@00e9投影到文件系统时 问题是:对于Java源文件(其名称必须与Java类的相应名称一致),是否有可能实现同样的效果 问题的背景是我需要在我的公共类名中使用带锐音符的重音e('ee','\u00e9')。是的,我知道我不应该,文件名中的Unicode是一种弊端,但我仍然需要它 但是,Mac OS X或底层HFS+文件系统
é
变成@00e9
,而papierM–ché
变成papierM@00e2ch@00e9
投影到文件系统时
问题是:对于Java源文件(其名称必须与Java类的相应名称一致),是否有可能实现同样的效果
问题的背景是我需要在我的公共类名中使用带锐音符的重音e(
'ee'
,'\u00e9'
)。是的,我知道我不应该,文件名中的Unicode是一种弊端,但我仍然需要它
但是,Mac OS X或底层HFS+文件系统都不允许文件名中的这一字符,将其替换为“e”,紧接着是带有尖锐重音的(“e\u0301”
)。此行为与NTFS或ext3/ext4完全不同,在NTFS或ext3/ext4中,名为“\u00e9”
和“e\u0301”
的两个文件可以共存于同一目录中(测试存储库为)
上述HFS+行为导致两个问题:
我无法用javac
编译我的类,因为类名和文件名不一样(尽管我am可以用Maven或ecj编译它们)
我无法使用Git管理我的类,因为它总是报告文件已重命名:
$git状态。
#论分行行长
#未跟踪的文件:
#(使用“git add…”包含在将提交的内容中)
#
#“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\201jdbconnectionparameters.java”
#“src/main/java/com/intersystems/persistence/Cache\314\201jdbcpsistener.java”
#“src/main/java/com/intersystems/persistence/ui/Cache\314\201jdbconnectionParametersPanel.java”
提交时未添加任何内容,但存在未跟踪的文件(使用“git add”跟踪)
如果希望名称是ASCII安全的,那么可以将java文件命名为papierM@00e2ch@java
,并确保在任何其他类尝试引用它之前编译它。这是可行的,因为.java
不需要是.java
,但这是常见的做法,编译器不会尝试从adiffertfilename.java
编译ClassA
,原因显而易见。但是,如果adiffertfilename.java
已经编译成ClassA.class
,那么它就可以工作了
除此之外,您在用纯ASCII命名文件方面运气不佳
另一方面,您提到您已经通过使用.gitignore
文件解决了git问题,但是您可能会发现更好的方法是
如果您使用这个,那么您应该能够拥有您的文件papierM–ché.java
,并从所有Linux、Mac和Windows访问它。“是的,我知道我不应该,文件名中的Unicode是一种弊端,但我仍然需要它”-为什么?我正在开发一些与此相关的基准测试代码。如果类名没有acute over e(“缓存”),那么它的读取和理解完全不同,因此没有acute的名称只是误导。顺便说一句,通过将/Caché*.java
添加到.gitignore
“如果类名没有锐over e(“缓存”),它的读取和理解完全不同”——请告诉我你在开玩笑……HFS+使用“分解”Unicode,字符和重音分开。我认为它总是分解名称,即使程序使用更常见的“组合”Unicode。@Holger:好的,我们这样说吧:它不能,但是1。我想强调的是,该软件与ISC Caché和2有关。我已经非常好奇如何实现这一点,即使我将来不会使用这种代码风格。这就是为什么人们有混淆代码竞赛的原因。
$ 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)
git config --global core.precomposeunicode true