Согласно JLS, можно «исказить» имена пакетов, содержащие символы, отличные от ASCII, в случае, если файловая система хоста не поддерживает Unicode. Например, пакет é
становится @00e9
, а papierMâché
становится papierM@00e2ch@00e9
при проецировании в файловую систему.
Вопрос в следующем: можно ли когда-нибудь добиться того же самого для исходных файлов Java (имена которых должны совпадать с соответствующими именами классов Java)?
Суть проблемы в том, что мне нужно, чтобы в имени моего публичного класса ('é'
, '\u00e9'
) была буква e с острым акцентом. Да, я знаю, что не должен, и Unicode в именах файлов является злоупотреблением служебным положением, но все же мне это нужно.
Однако либо Mac OS X, либо базовая файловая система HFS+ запрещает этот самый символ в именах файлов, заменяя его на «e», за которым сразу следует COMBINING ACUTE ACCENT
("e\u0301"
). Такое поведение полностью отличается от NTFS или ext3/ext4, где два файла с именами "\u00e9"
и "e\u0301"
могут сосуществовать в одном каталоге (тестовый репозиторий — здесь).
Приведенное выше поведение HFS+ приводит к двум проблемам:
- Я не могу скомпилировать свои классы с помощью
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)
/Caché*.java
к.gitignore
. - person Bass   schedule 18.09.2013.gitignore
(см. 2-й комментарий). Я бы все же предпочел, чтобы мои имена файлов были в чистом ASCII, так что это скорее вопрос Java. - person Bass   schedule 18.09.2013