Как нарисовать арабский текст на Android после чтения из файла? - PullRequest
0 голосов
/ 27 сентября 2010

Я выяснил, как правильно рисовать арабские символы (подключенные и справа налево), используя строковые литералы, подобные этому:

textView.setTypeFace(Typeface.createFromAssets(getAssets(),"DejaVuSans.ttf"));
textView.setText("\uFEB3\uFE92\uFE98\uFE94");

Но по какой-то причине я не могу заставить арабский правильно отформатировать, если ячитать что-либо из файла, используя InputStreams, например:

arabictext.txt:

سبتة

и код:

InputStream istream = as.open("arabictext.txt");

     String string;
        BufferedInputStream bis = new BufferedInputStream(istream);

        /* Read bytes to the Buffer until
         * there is nothing more to read(-1). */
        ByteArrayBuffer baf = new ByteArrayBuffer(50);
        int current = 0;
        while((current = bis.read()) != -1){
                baf.append((byte)current);
        }

        /* Convert the Bytes read to a String. */
        string = new String(baf.toByteArray(), 0, baf.length(), "UTF-8");

, а затем отображать строку в текстовом представлении,Буквы упорядочены правильно, но не связаны и не имеют правильной формы конца слова / середины слова.Это не имеет смысла для меня, потому что я думал, что каждая форма каждой буквы - это отдельная кодовая точка Unicode.

2) Помещение фактических значений кода в файл просто заставляет текстовое представление отображать значения кодовой точки какСтрока.

Любая помощь будет оценена!Я начал создавать собственный вид, чтобы просто рисовать текст, но он стал сложным, быстрым.

1 Ответ

3 голосов
/ 25 ноября 2010

салам алейком, На самом деле есть разница между текстом, который вы используете в прямом коде:

textView.setText("\uFEB3\uFE92\uFE98\uFE94");

И что вы получили из файла, который, я полагаю, будет:

\u0633\u0628\u062a\u0647

, поэтому попробуйте вставить символы в окончательном формате (после рендеринга) в файл, тогда вы получите ожидаемый результат.

...