У меня есть двунаправленный текст
1002 -ابو ماجد الانصاري
Большинство редакторов notepad ++, notepad и т. Д. Показывают текст, как показано здесь. Но когда я обрабатываю этот текст через ICU, число смещается вправо, затем через пробелы и дефис, а затем на арабский. Пример приложения ICU layout.exe также показывает число справа.
Я изменил файл paralayout.cpp и установил все возможные режимы переупорядочения, но результат остался прежним:
Может ли кто-нибудь помочь настроить ICU для обеспечения вывода, как это делают другие механизмы отображения.
Если я правильно понимаю, ваш текст «начинается» с цифры, за которой следуют дефис и текст. Блокнот и другие редакторы позволяют выбрать «направление письма». Если вы выберете справа налево, вы получите тот же результат, что и на скриншоте,
Если вы хотите сохранить направление письма слева направо, вы можете установить его явно
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).
Других решений пока нет …