JLSによると、ホスト ファイルシステムが Unicode をサポートしていない場合、ASCII 以外の文字を含むパッケージ名を「マングル」することが可能です。たとえば、パッケージはにé
なり、ファイル システムに投影されると になります。@00e9
papierMâ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)