Подтвердить что ты не робот

Зачем мне нужно избегать unicode в исходных файлах java?

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

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

Если я определяю свои литералы, например:

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

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

enter image description here

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

enter image description here

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

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

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

Я думал, что компилятор должен был преобразовать строки java literal при построении байт-кода. Итак, почему нужно избегать unicode? Неправильно ли использовать символы unicode с высоким диапазоном в исходных файлах Java? Что происходит именно с этими символами при компиляции и в чем они отличаются от обработки экранов с экранами? Проблема связана только с кешем RCP?

4b9b3361

Ответ 1

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

(Copypasta'd при запросе OP)

Ответ 2

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

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

javacDefaultEncoding.. =UTF-8