MOE*_*MOE 5 c++ bidi bidirectional icu
我有一个双向文本
1002 -??? ???? ????????
Run Code Online (Sandbox Code Playgroud)
大多数编辑记事本++,记事本等显示文本,如此处所示.但是当我通过ICU处理这个文本时,数字会向右移动,然后是空格和连字符,然后是阿拉伯语.ICU的示例应用程序layout.exe也显示右侧的数字.我修改了paragraphlayout.cpp并设置了所有可能的重新排序模式,但结果仍然相同:

有人可以帮助配置ICU以提供其他显示引擎的输出.
如果我理解正确,你的文字'开始'用数字,后跟连字符和文字.记事本和其他编辑器让您选择"书写方向".如果从右到左选择,则会得到与屏幕截图相同的结果,

如果要保持从左到右的书写方向,可以明确设置
ubidi_setPara(para, "1002 -??? ???? ????????", ?25, UBIDI_LTR, NULL, pErrorCode);
Run Code Online (Sandbox Code Playgroud)
或者你可以在你的字符串中嵌入一个UNICODE标志U + 202A(LEFT-TO-RIGHT EMBEDDING)来强制执行这个方向.如果您的代码是C++,您可以编写类似的东西
icu::UnicodeString string_to_layout = "\x202a";
string_to_layout += "1002 -??? ???? ????????";
Run Code Online (Sandbox Code Playgroud)
而不是你可以string_to_layout用作输入参数renderParagraph()(参见http://icu-project.org/apiref/icu4c-latest/ubidi_8h.htm).
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |