Разобраны арабские буквы на польском приложении 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, он рисует слева направо. Если телефон рисует арабский символ слева направо, вы должны повернуть строку после изменения формы это, а затем вы можете отобразить его.