Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HFS+;文件系统_Java_Macos_Git_Jls_Hfs+ - Fatal编程技术网

Java HFS+;文件系统

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+文件系统

根据,在主机文件系统不支持Unicode的情况下,可能会“破坏”包含非ASCII字符的包名。例如,包
é
变成
@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