在 Java 开发过程中支持双向字符集语言(BiDi)
2010-03-15 00:00:00 来源:WEB开发网核心提示: 常见 BiDi 问题以及分析,解决技巧LRM(\u200F)/RLM(\u200E) 符号的使用在双向字符集语言中,在 Java 开发过程中支持双向字符集语言(BiDi)(9),标点符号的处理是 BiDi 算法中一个需要特别关注的地方,在 BiDi 中,标点符号在显示的时候应该在英文单词的左侧,
常见 BiDi 问题以及分析,解决技巧
LRM(\u200F)/RLM(\u200E) 符号的使用
在双向字符集语言中,标点符号的处理是 BiDi 算法中一个需要特别关注的地方。在 BiDi 中,所有的非标点符号被称为“强”字符。而标点符号既可以是从左向右 LTR 也可以是从右向左 RTL。因为不含任何的方向信息,所以被称为“弱”字符。通常是由软件根据 BiDi 算法来决定标点符号放置的方向。
在 BiDi 算法中,如果标点符号放在两段有相同方向文字的中间,标点符号将继承相同的方向。如果标点符号放在两段有不同方向的文字中间,标点符号将继承全局方向。如果一个“弱”字符紧挨着一个“弱”字符,BiDi 算法将根据最近相邻的“强”字符来决定字符方向。在某些情况下,这会导致非预期的情况出现。为了纠正错误,需要使用“伪强”字符(U200E RLM 或者 U200F RLM)插入到文字中间来调整字符的显示。下面就用具体的示例来说明如何使用这两个符号来调整内容的显示。
有如下一段英文“UDDI inquiry URL:”,开发人员要将这段文字的阿拉伯文字(单词 UDDI 和 URL 不需要翻译)在界面上用 JLabel 控件展示出来,并注意 对齐方式 章节涉及的内容。在界面上文字的显示如图 10 所示。
图 10. 标点符号在右侧
这段文字的阿拉伯资源为“URL \u0644\u0637\u0644\u0628 UDDI:”,标点符号在显示的时候应该在英文单词的左侧,而实际上 Swing 却把这个符号显示在了右侧,甚至把两侧的英文显示也颠倒了。
更多精彩
赞助商链接