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

2022-09-01 07:29:47

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

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

希望有人能帮助我。

亲切问候

卡洛斯·费雷拉

顺便说一句,字符串是从数据库中获取的。

编辑

enter image description here

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

编辑 2

实际上,串联的字符串与图像中的字符串略有不同,它在复制+粘贴过程中发生了变化,1在第一个A之后,而不是紧挨着第二个A。


答案 1

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

  • 从左到右的嵌入 (U+202A)
  • 从右到左嵌入 (U+202B)
  • 弹出定向格式 (U+202C)

因此,在java中,要将像阿拉伯语这样的RTL语言嵌入到像英语这样的LTR语言中,你会做的

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

并执行相反操作

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

有关更多详细信息,请参阅双向常规格式设置,或参阅 Unicode 规范一章“定向格式代码”以了解源材料。


答案 2

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

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