2009-12-18 3 views
0

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

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

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

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

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

Спасибо!

ответ

3

Решения должны пройти последовательность Unicode как массив символов:

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

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

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))); 

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

+0

При анализе строкового литерала компилятор Java распознает \ uNNNN как escape-последовательность unicode и преобразует его в один символ Unicode в файле класса. Единственный символ '\ u0627' и строка "\ u0627" обрабатываются иначе. Я не верю, что getUnicodeChars сделает что-нибудь для этого образца кода, поэтому я удивлен, что это принятый ответ. –

+0

Чтобы уточнить, в последнем блоке кода: txt.length() вернет 7, а не 42. –

+0

@MichaelDonohue предполагает, что переменная txt загружается из потока данных –

2

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

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

Locale.get(Locale.LOCALE_ar, null)

Вы возвращаете значение null или значение языкового стандарта?

КОРРЕКЦИЯ: символ йены не в формате unicode, а просто как чистый текст (я получаю его с сервера). Если вы сохраните исходную строку на арабском языке в ресурсах (а не в Юникоде), что она покажет? Обратите внимание: ввод четкого текста в код не работает.

+0

Спасибо за ответ! Можете ли вы разместить образец для йены? Да, арабский шрифт установлен на устройстве, я написал образец с ресурсами локализации, отлично работает. Также Locale.setDefault (Locale.get (Locale.LOCALE_ar, null)); работает с изменением ориентации текста в RTL –

+0

Что происходит в LabelField? вы сказали, что это RTL, так что не работает? – Tamar

+0

Нет арабских символов, последовательностей Unicode ... –

Смежные вопросы