2012-03-06 48 views
1

我使用J2ME波兰语在两个三星设备上开发应用程序,该应用程序支持阿拉伯语言。 三星明星的wifi,应用程序工作正常,但像三星GT-S3653设备上的所有字母出现DIS组装 任何帮助,将不胜感激 感谢三星J2ME波兰应用程序的阿拉伯字母被拆卸

+0

检查这个答案[显示阿拉伯字体在J2ME] [1] [1]:http://stackoverflow.com/questions/9494472/displaying-arabic-on-device-j2me/9495011# 9495011 – 2012-03-06 09:06:04

回答

0

我SPEAKE波斯语和我大约有同样的问题4年前。您有一些方法可以解决此问题:
1- 使用自定义字体
2- 在显示之前将文本重新整形。
关于第一个好文章是“MIDP Terminal Emulation, Part 3: Custom Fonts for MIDP”。但对于阿拉伯文字母,我认为这并不简单。
大约在第二种方式,说你会替换与正确character.This文字的任何字符意味着当你有:

String str = "به"; 

如果得到海峡人物,他们会看起来像:
{1576,1607 }这就像是“به”而不是“به”,所以你应该用正确的Unicode代码替换不正确的Unicode(在这种情况下,正确的字符是:{65169,65258}),你可以使用“Arabic Reshapers”设计用于android!我看到了这个整形器的2个链接:1- (我是波斯开发者,所以我不试试它们)。使用一个好的阿拉伯语整形器也可能会出现从左到右排列字符的问题对 而不是从右到左(有些手机画符从左至右,从右到左等)。我使用下面的类来检测排序为真(从右到左)或不:

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,它从左向右绘制。如果手机从左向右画阿拉伯字符,你可以在重塑它之后反转字符串然后你可以显示它。