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

标签 c++ icu bidirectional bidi

我有一个双向文本

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

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

See Problem Text here

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

最佳答案

如果我没理解错的话,您的文本“以”数字“开头”,然后是连字符和文本。记事本和其他编辑器让您选择“书写方向”。如果您选择从右到左,您会得到与屏幕截图相同的结果,

RTL screenshot

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

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

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

关于c++ - ICU 布局示例以不同于 Microsoft 记事本和 Word 的方式呈现文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47326951/

相关文章:

python - Python 中使用了哪种正则表达式风格?

c++ - 如何将一个字符(ICU4C)Unicode字符串复制到另一个Unicode字符串?

c++ - 如何使用非 STL 类型(例如来自 ICU 的 UnicodeString)创建 unordered_map?

c++ - 计算每个不同单词在输入中出现的次数

c++ - 在 SYCL 中使用屏障

c++ - 使用 g++ 在不同文件夹中创建带有 .o 文件的可执行文件时出现问题

android - 如何为从右到左的语言创建多语言 android 应用程序?

java - 如何将PrimeFaces的 "Wizard"和 "PanelGrid"方向改为RTL

java - 双向多线程套接字连接

c++ - unique_ptr 编译错误