Разобраны арабские буквы на польском приложении Samsung J2ME

Я использую J2ME для разработки приложений на двух устройствах Samsung. Приложение поддерживает арабский язык. На Samsung star wifi приложение работает нормально, но на таком устройстве, как samsung GT-S3653, все буквы отображаются в разобранном виде, любая помощь будет высоко оценена. Спасибо

1 ответ

Решение

Я говорю на фарси, и у меня была такая же проблема около 4 лет назад. У вас есть способ решить эту проблему:
1-использование пользовательских шрифтов.
2-изменить текст перед отображением.
Хорошая статья в первой части - " Эмуляция терминала MIDP, часть 3: Пользовательские шрифты для MIDP". Но для арабских букв я думаю, что это не просто.
Примерно во втором случае, скажем, вы хотели бы заменить любой символ в вашем тексте на правильный символ. Это означает, что когда у вас есть:

String str = "به";   

Если получить символы str, они будут выглядеть так:
{1576,1607}, который похож на "ب ه" вместо "به". Таким образом, вы должны заменить неправильный Юникод на правильные коды Юникода (в этом случае правильные символы: {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, убедитесь, что телефон рисует арабские символы справа налево и отображает ваш String.If возвращает false, он рисует слева направо. Если телефон рисует арабский символ слева направо, вы должны повернуть строку после изменения формы это, а затем вы можете отобразить его.

Другие вопросы по тегам