在设备J2ME上显示阿拉伯语

时间:2012-02-29 06:22:39

标签: java java-me java-micro-editon-sdk3.0

我在我的应用中使用了一些阿拉伯文字。在模拟器上阿拉伯语文本正在播放。

但是在设备上它没有正确显示。

在模拟器上它就像مرحبا一样。

但在设备上它就像مرحبا。

我需要的是这个مرحبا。

1 个答案:

答案 0 :(得分:5)

为MIDP应用程序创建文本资源,以及如何在运行时加载它们。这种技术是unicode安全的,因此适用于所有语言。运行时代码很小,速度很快,而且使用的内存相对较少。

创建文本源

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

该过程从创建文本文件开始。加载文件后,每一行都成为一个单独的String对象,因此您可以创建一个文件:

这需要采用UTF-8格式。在Windows上,您可以在记事本中创建UTF-8文件。确保使用“另存为...”,然后选择“UTF-8编码”。

enter image description here

命名为arb.utf8

这需要转换为MIDP应用程序可以轻松读取的格式。 MIDP不提供读取文本文件的便捷方法,如J2SE的BufferedReader。在字节和字符之间进行转换时,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]);

希望这会对你有所帮助。感谢