包含阿拉伯语和西方字符的字符串连接

时间:2011-05-30 14:03:40

标签: java string internationalization arabic

我正在尝试连接几个包含阿拉伯语和西方字符的字符串(混合在同一个字符串中)。问题是结果是一个字符串,它很可能在语义上正确,但与我想要获得的字符串不同,因为Unicode双向算法改变了字符的顺序。基本上,我只是想连接好像它们都是LTR,忽略了一些事实,即RTL,一种“不可知”的连接。

我不确定我的解释是否清楚,但我认为我不能做得更好。

希望有人可以帮助我。

亲切的问候,

Carlos Ferreira

BTW,字符串是从数据库中获得的。

修改

enter image description here

前两个字符串是我要连接的字符串,第三个是结果。

编辑2

实际上,串联的字符串与图像中的字符串略有不同,它在复制+粘贴期间被改变,1在第一个A之后而不是在第二个A之前。

3 个答案:

答案 0 :(得分:43)

您可以使用unicode格式控制代码点嵌入bidi区域:

  • 从左到右嵌入(U + 202A)
  • 从右向左嵌入(U + 202B)
  • 流行方向格式(U + 202C)

所以在java中,要用像英语这样的LTR语言嵌入像阿拉伯语这样的RTL语言,你会这样做

myEnglishString + "\u202B" + myArabicString + "\u202C" + moreEnglish

并做反向

myArabicString + "\u202A" + myEnglishString + "\u202C" + moreArabic

有关详细信息,请参阅Bidirectional General Formatting;有关源材料,请参阅the Unicode specification chapter on "Directional Formatting Codes"

答案 1 :(得分:2)

您很可能需要在字符串中插入Unicode方向格式代码才能正确显示字符串。有关详细信息,请参阅Unicode双向算法规范的Directional Formatting Codes

也许Bidi类可以帮助您确定正确的序列,因为它实现了Unicode双向算法。

答案 2 :(得分:1)

它不会改变代码点的顺序。发生的事情是,当显示字符串时,它会看到字符串以从右到左的脚本开头,因此它从右向左显示。