2012-02-29 2 views
1

Я использую арабский текст в своем приложении. на симуляторе Арабский текст отлично подходит.Отображение арабского языка на устройстве J2ME

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

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

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

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

ответ

5

Создание текстовых ресурсов для приложения 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]); 

Надеется, что это поможет. Спасибо

+0

У меня есть магазин арабских строк в базе данных. для этого я думаю, что мне не нужны потоки, или сначала я пишу, что qurey приводит к файлу, а затем делает это work.is это правильно – user1239521

+0

@ user1239521 Если этот ответ помог вам, и вы получили эту идею, тогда отметьте вопрос знаком тика рядом с ответом , – AbdulAziz

+0

@ Sajid Shaikh the replaceall fuction и список находятся в j2ME. – user1239521

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