ICU 布局示例以不同于 Microsoft 记事本和 Word 的方式呈现文本

ICU Layout sample renders text differently than Microsoft Notepad and Word

我有一个双向文本

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

大多数编辑器 notepad++、notepad 等都按此处显示的方式显示文本。但是,当我通过 ICU 处理此文本时,数字向右移动,然后是空格和连字符,然后是阿拉伯语。 ICU 的示例应用程序 layout.exe 也显示了右侧的数字。 我修改了 paragraphlayout.cpp 并设置了所有可能的重新排序模式,但结果仍然相同:

有人可以帮助配置 ICU 以像其他显示引擎那样提供输出。

如果我没理解错的话,你的文本 'begins' 带有数字,后跟连字符和文本。记事本和其他编辑器让你选择'writing direction'。如果您选择从右到左,您会得到与您的屏幕截图相同的结果,

如果要保持从左到右的书写方向,可以明确设置

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

或者您可以将 U+202A (LEFT-TO-RIGHT EMBEDDING) 的 UNICODE 标志嵌入到您的字符串中,以强制执行此方向。如果你的代码是用 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)。