Образец ICU Layout отображает текст иначе, чем Microsoft Notepad и Word

У меня есть двунаправленный текст

1002   -ابو ماجد الانصاري

Большинство редакторов notepad ++, notepad и т. Д. Показывают текст, как показано здесь. Но когда я обрабатываю этот текст через ICU, число смещается вправо, затем через пробелы и дефис, а затем на арабский. Пример приложения ICU layout.exe также показывает число справа.
Я изменил файл paralayout.cpp и установил все возможные режимы переупорядочения, но результат остался прежним:

См текст проблемы здесь

Может ли кто-нибудь помочь настроить ICU для обеспечения вывода, как это делают другие механизмы отображения.

5

Решение

Если я правильно понимаю, ваш текст «начинается» с цифры, за которой следуют дефис и текст. Блокнот и другие редакторы позволяют выбрать «направление письма». Если вы выберете справа налево, вы получите тот же результат, что и на скриншоте,

Скриншот RTL

Если вы хотите сохранить направление письма слева направо, вы можете установить его явно

ubidi_setPara(para, "1002   -ابو ماجد الانصاري", ‭25, UBIDI_LTR, NULL, pErrorCode);

или вы можете встроить флаг UNICODE U + 202A (ВСТАВКА ВЛЕВО В ПРАВО) в вашу строку, которая будет обеспечивать это направление. Если ваш код на C ++, вы можете написать что-то вроде

icu::UnicodeString string_to_layout = "\x202a";
string_to_layout += "1002   -ابو ماجد الانصاري";

и не можете использовать string_to_layout в качестве входного параметра для renderParagraph() (увидеть http://icu-project.org/apiref/icu4c-latest/ubidi_8h.htm).

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]