JLSによると、ホスト ファイルシステムが Unicode をサポートしていない場合、ASCII 以外の文字を含むパッケージ名を「マングル」することが可能です。たとえば、パッケージはにéなり、ファイル システムに投影されると になります。@00e9papierMâchépapierM@00e2ch@00e9
問題は、Java ソース ファイル (その名前は Java クラスの対応する名前に一致する必要があります) に対しても同じことを実現できるでしょうか?
'é'問題の背景は、パブリック クラス名 ( , )にアクセント付きの e と acute を付ける必要があることです'\u00e9'。はい、すべきではないことはわかっています。ファイル名の Unicode は不正ですが、それでも必要です。
ただし、Mac OS X または基盤となる HFS+ ファイルシステムでCOMBINING ACUTE ACCENTは、ファイル名にこの文字そのものを使用することはできず、'e' の直後に( )が続く文字に置き換えられます"e\u0301"。この動作は、NTFS や ext3/ext4 とはまったく異なります。この場合、名前が付けられた 2 つのファイル"\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)