三星J2ME波兰应用程序上的阿拉伯字母被拆解

时间:2012-03-06 08:59:20

标签: java-me arabic j2mepolish samsung-mobile

我正在使用J2ME polish在两个三星设备上开发应用程序,该应用程序支持阿拉伯语言。 在三星明星wifi上,该应用程序工作正常,但在像三星GT-S3653这样的设备上,所有字母都显示为已拆解 任何帮助将受到高度赞赏 谢谢

1 个答案:

答案 0 :(得分:0)

我说波斯语,大约4年前我遇到了同样的问题。你有办法解决这个问题:
1- 使用自定义字体
2- 重塑文字,然后再显示 关于第一个的好文章是“MIDP Terminal Emulation, Part 3: Custom Fonts for MIDP”。但对于阿拉伯字母,我认为这并不简单 大约在第二种方式,假设你要用正确的字符替换文本中的任何字符。这意味着当你有:

String str = "به";   

如果获得str字符,它们将如下所示:
{1576,1607}就像“به”而不是“به”。所以你要用正确的Unicode代码替换不正确的Unicode(在这种情况下,正确的字符是:{65169,65258})。你可以使用“阿拉伯语重塑者” “甚至为Android设计的重塑器!我看到了这个重塑器的2个链接:1 - github 2 - Arabic Android(我是波斯开发者,所以我不尝试它们。)使用好的阿拉伯语reshaper你也可能有从左到右而不是从右到左排列字符的问题。(有些手机从左到右画出字符,从右到左画出其他字符)。我用下面的类来检测排序是否正确(从右到右)左)或不:

public class DetectOrdering{   
public static boolean hasTrueOrdering()
{
    boolean b = false;
    try {
        char[] chArr = {65169, 65258};
        String str = new String(chArr);
        System.out.println(str);
        int width = f1.charWidth(chArr[1]) / 2;
        int height = f1.getHeight();
        image1 = Image.createImage(width, height);
        image2 = Image.createImage(width, height);
        Graphics g1 = image1.getGraphics();
        Graphics g2 = image2.getGraphics();
        g1.drawString(str, 0, 0, 0);
        g2.drawChar(chArr[1], 0, 0, 0);
        int[] im1 = new int[width * height];
        int[] im2 = new int[width * height];

        image1.getRGB(im1, 0, width, 0, 0, width, height);
        image2.getRGB(im2, 0, width, 0, 0, width, height);
        if (areEqualIntArrrays(im1, im2)) {
            b = true;
        } else {
            b = false;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return b;
}

private static boolean areEqualIntArrrays(int[] i1, int[] i2) {
    if (i1.length != i2.length) {
        return false;
    } else {
        for (int i = 0; i < i1.length; i++) {
            if (i1[i] != i2[i]) {
                return false;
            }
        }
    }
    return true;
}
}    

如果DetectOrdering.hasTrueOrdering()返回true,请确保手机从右向左绘制阿拉伯字符并显示您的String.If返回false,从左到右绘制。如果手机从左到右绘制阿拉伯字符,您将反转重塑形状后的字符串,然后就可以显示它了。