我正在使用 J2ME 波兰语在两台三星设备上开发应用程序,该应用程序支持阿拉伯语。在三星明星 wifi 上,该应用程序运行良好,但在像三星 GT-S3653 这样的设备上,所有字母都显示为反汇编任何帮助将不胜感激谢谢
1 回答
我说波斯语,大约 4 年前我遇到了同样的问题。你有办法解决这个问题:
1-使用自定义字体。
2-在显示之前重塑您的文本。
about first 中的一篇好文章是“ MIDP 终端仿真,第 3 部分:MIDP 的自定义字体”。但是对于阿拉伯字母,我认为这并不简单。
在大约第二种方式中,假设您将用正确的字符替换文本中的任何字符。这意味着当您有:
String str = "به";
如果获取 str 字符,它们将如下所示:
{1576,1607} 类似于“به”而不是“به”。因此,您可以用正确的 Unicode 代码替换不正确的 Unicode(在这种情况下,正确的字符是:{65169, 65258})。您可以使用“阿拉伯语整形器”甚至是专为 android 设计的整形器!我看到了这个整形器的 2 个链接:1- github 2-阿拉伯语 Android(我是波斯开发人员,所以我不尝试它们)。使用一个好的阿拉伯语整形器,你可能会遇到从左到右而不是从右到左排列字符的问题。(有些手机从左到右绘制字符,其他从右到左绘制字符)。我使用下面的类来检测排序是否正确(从右到左)与否:
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,请确保手机从右到左绘制阿拉伯字符并显示您的字符串。如果返回 false,它会从左到右绘制。如果手机从左到右绘制阿拉伯字符,您将在重塑后反转字符串它,然后你可以显示它。