Почему мне нужно экранировать Unicode в исходных файлах Java?

Обратите внимание, что я не спрашиваю, как, но почему. И я не знаю, является ли это конкретной проблемой для RCP, или это что-то присуще Java.

Мои исходные файлы Java закодированы в UTF-8.

Если я определю свои буквальные строки следующим образом:

    new Language("fr", "Français"),
    new Language("zh", "中文")

Он работает так, как я ожидаю, когда я использую строку в приложении, запуская ее из Eclipse как приложение Eclipse:

Но если происходит сбой при запуске.exe, созданного "Мастером экспорта продуктов Eclipse":

Решение, которое я использую, состоит в том, чтобы избежать символов следующим образом:

    new Language("fr", "Fran\u00e7ais"), // Français
    new Language("zh", "\u4e2d\u6587") // 中文

В этом нет никаких проблем (все мои другие строки находятся в файлах свойств, только названия языков жестко запрограммированы), но я хотел бы понять.

Я думал, что компилятор должен был преобразовывать строки Java-букв при построении байт-кода. Так почему же нужен экранирование Юникода? Это неправильно использовать высокоуровневые символы Юникода в исходных файлах Java? Что происходит именно с этими символами при компиляции и чем это отличается от обработки экранированных символов? Проблема только связана с кешем RCP?

2 ответа

Решение

Похоже, что мастер экспорта продуктов Eclipse не интерпретирует ваши файлы как UTF-8. Возможно, вам нужно запустить JVM Eclipse с кодировкой UTF-8 (-Dfile.encoding=UTF8 в eclipse.ini)?

(Copypasta'd по запросу ОП)

При экспорте плагина он компилируется через процесс, отдельный от обычного процесса сборки в среде IDE. Существует известная ошибка, что процесс сборки (PDE.Build) игнорирует кодировку текста, используемую IDE.

Экспорт можно заставить работать должным образом, указав кодировку текста в файле build.properties вашего плагина

javacDefaultEncoding.. =UTF-8
Другие вопросы по тегам