Плагины Eclipse: кодирование в метках - PullRequest
0 голосов
/ 03 декабря 2018

Как настроить кодировку SWT-меток в EclipsePlugin?

У меня есть EclipsePlugin, который использует IWorkbenchPreferencePage в окне -> настройки.Описание (setDescription()) содержит немецкий Umlaute (ä, ö, ü), которые не работают во время выполнения.

Кроме того, у меня есть другой диалог в моем плагине, который показывает ту же проблему в org.eclipse.swt.widgets.Label s.Я предполагаю, что IWorkbenchPreferencePage.setDescription() также создает метку, поэтому я считаю, что это та же проблема.

«сломан» означает, что во время выполнения умлауты отображаются в виде двух символов вместо одного, я думаю, что этопотому что умлауты выражаются в 2 байта, но они читаются как 1-байтовые символы.

Странно, но такое поведение применяется только в экспортированном и установленном плагине, а не в плагине, который выполняется в рабочей среде (Plugin.xml -> run as Eclipse Application)

Уже есть некоторыеболее ранние описания этой проблемы, предлагающие использовать другие шрифты, но я не верю, что это проблема.Поскольку использование escape-символов Юникода (например, \ u00f6 вместо «ö») в строках приводит к правильным умлаутам, я считаю, что проблема заключается скорее в процессе экспорта, чем в самих ярлыках.

Короткий пример:

Plugin.xml:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.preferencePages">
      <page
            class="org.example.PreferencePage"
            id="org.example.PreferencePage"
            name="Umlaute">
      </page>
   </extension>

</plugin>

Реализация:

package org.example;

import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

public class PreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

    @Override
    public void init(IWorkbench workbench) {
        setDescription("This character is broken: \"ö\". This is ok: \u00f6");

    }

    @Override
    protected void createFieldEditors() {

    }

}

Результат выглядит следующим образом:

WrongEncoding

...