BlackBerry - Unicode текстовое отображение - PullRequest
0 голосов
/ 18 декабря 2009

Я хотел бы отобразить арабский текст в LabelField в приложении j2me на устройстве BlackBerry. Предположим, что на устройстве установлен арабский шрифт.

В ресурсах локализации, если используется арабская локаль, весь текст сохраняется в последовательностях Юникода. Но если я использую такой формат явно, также устанавливаю арабский язык, он не работает:

    Locale.setDefault(Locale.get(Locale.LOCALE_ar, null));
    add(new LabelField("\u0627\u0644\u0639\u0631\u0628\u064A\u0629"));

Пожалуйста, совет:

  • В каком формате или кодовой странице я должен сохранять арабский текст?
  • Как отобразить арабский текст в Label с использованием установленного арабского шрифта?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 22 декабря 2009

Решение состоит в том, чтобы передать последовательность Unicode как массив символов:

char[] text = new char[] {'\u0627', '\u0644', '\u0639', 
    '\u0631', '\u0628', '\u064A', '\u0629'};
add(new LabelField(text));

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

private char[] getUnicodeChars(String string) {
    char[] result = new char[] {};
    String[] charCodes = split(string, "\\");
    result = new char[charCodes.length];
    for (int i = 0; i < charCodes.length; i++) {
        result[i] = (char) Integer.parseInt(charCodes[i].substring(1), 16);
    }
    return result;
}

И где-то в коде:

String txt = "\u0627\u0644\u0639\u0631\u0628\u064A\u0629";
add(new LabelField(getUnicodeChars(txt)));

И переключать локаль не нужно. Конечно, арабский шрифт должен быть установлен.

2 голосов
/ 18 декабря 2009

Я отображаю символ японской иены на устройстве, не устанавливая языковой стандарт устройства на японский, просто передавая строку в представлении юникода (как вы делаете в вашем примере), а j2me обрабатывает остальное. Однако я не уверен, что в такой ситуации ориентация будет справа налево.

По умолчанию на устройстве отсутствует арабский шрифт, вы уверены, что оно установлено на устройстве? Когда вы делаете:

Locale.get(Locale.LOCALE_ar, null)

Возвращаете ли вы нулевое или локальное значение?

ИСПРАВЛЕНИЕ: Символ йены не в значении Unicode, а просто в виде открытого текста (я получаю его с сервера). Если вы храните исходную строку на арабском языке в ресурсах (вместо юникода), что это показывает? Примечание: вставка открытого текста в код не работает.

...