Отображение арабского на устройстве J2ME - PullRequest
1 голос
/ 29 февраля 2012

Я использую арабский текст в своем приложении. на симуляторе арабский текст отображается нормально.

НО на устройстве не отображается должным образом.

На симуляторе это похоже на مَرْحَبًا.

Но на устройстве это как مرحبا.

Мне нужна эта مَرْحَبًا.

1 Ответ

5 голосов
/ 29 февраля 2012

Создание текстовых ресурсов для приложения MIDP и способы их загрузки во время выполнения. Этот метод безопасен в Юникоде и подходит для всех языков. Код времени выполнения небольшой, быстрый и использует относительно мало памяти.

Создание источника текста

اَللّٰهُمَّ اِنِّىْ اَسْئَلُكَ رِزْقًاوَّاسِعًاطَيِّبًامِنْ رِزْقِكَ
مَرْحَبًا

Процесс начинается с создания текстового файла. Когда файл загружен, каждая строка становится отдельным объектом String, поэтому вы можете создать файл наподобие:

Это должно быть в формате UTF-8. В Windows вы можете создавать файлы UTF-8 в Блокноте. Убедитесь, что вы используете Сохранить как ... и выберите кодировку UTF-8.

enter image description here

Сделать имя arb.utf8

Это необходимо преобразовать в формат, который легко читается приложением MIDP. MIDP не предоставляет удобных способов чтения текстовых файлов, таких как BufferedReader J2SE. Поддержка Unicode также может быть проблемой при преобразовании между байтами и символами. Самый простой способ прочитать текст - использовать DataInput.readUTF (). Но чтобы использовать это, нам нужно написать текст, используя DataOutput.writeUTF ().

Ниже приведена простая программа командной строки J2SE, которая будет читать файл .uft8, сохраненный из блокнота, и создавать файл .res для добавления в JAR.

import java.io.*;
import java.util.*;

public class TextConverter {

    public static void main(String[] args) {
        if (args.length == 1) {
            String language = args[0];

            List<String> text = new Vector<String>();

            try {
                // read text from Notepad UTF-8 file
                InputStream in = new FileInputStream(language + ".utf8");
                try {
                    BufferedReader bufin = new BufferedReader(new InputStreamReader(in, "UTF-8"));
                    String s;
                    while ( (s = bufin.readLine()) != null ) {
                        // remove formatting character added by Notepad
                        s = s.replaceAll("\ufffe", "");
                        text.add(s);
                    }
                } finally {
                    in.close();
                }

                // write it for easy reading in J2ME
                OutputStream out = new FileOutputStream(language + ".res");
                DataOutputStream dout = new DataOutputStream(out);
                try {
                    // first item is the number of strings
                    dout.writeShort(text.size());
                    // then the string themselves
                    for (String s: text) {
                        dout.writeUTF(s);
                    }
                } finally {
                    dout.close();
                }
            } catch (Exception e) {
                System.err.println("TextConverter: " + e);
            }
        } else {
            System.err.println("syntax: TextConverter <language-code>");
        }
    }
}

Чтобы преобразовать arb.utf8 в arb.res, запустите конвертер как:

java TextConverter arb

Использование текста во время выполнения

Поместите файл .res в JAR.

В приложении MIDP текст можно прочитать с помощью этого метода:

  public String[] loadText(String resName) throws IOException {
    String[] text;
    InputStream in = getClass().getResourceAsStream(resName);
    try {
        DataInputStream din = new DataInputStream(in);
        int size = din.readShort();
        text = new String[size];
        for (int i = 0; i < size; i++) {
            text[i] = din.readUTF();
        }
    } finally {
        in.close();
    }
    return text;
}

Загрузите и используйте текст, подобный этому:

String[] text = loadText("arb.res");
System.out.println("my arabic word from arb.res file ::"+text[0]+" second from arb.res file ::"+text[1]);

Надеюсь, это поможет вам. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...