Зачем мне экранировать юникод в исходных файлах 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 при построении байт-кода. Итак, почему необходимо экранирование юникода? Неправильно ли использовать символы unicode высокого диапазона в исходных файлах Java? Что именно происходит с этими символами при компиляции и чем это отличается от обработки экранированных символов? Проблема связана только с кешем RCP?

12
задан Denys Séguret 27 June 2012 в 13:17
поделиться