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

标签 java string internationalization arabic

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

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

希望有人可以帮助我。

亲切的问候,

卡洛斯·费雷拉

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

编辑

enter image description here

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

编辑 2

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

最佳答案

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

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

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

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

反之亦然

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

Bidirectional General Formatting更多详情,或the Unicode specification chapter on "Directional Formatting Codes"为源 Material 。

关于java - 包含阿拉伯和西方字符的字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6177294/

相关文章:

java - 如何使用 Apache Camel 正确聚合文件内容?

java - 将 Scanner next 字符串转换为 Int 并检查输入的文本是否为数字

javascript - 如何使用 Intl 在 javascript 中获取月份名称列表

c# - 为什么 N'ko 使用 3 位小数来显示定点 ("F") 数字,而实际上其他所有文化都使用 2 位?

javascript - AngularJS 和 i18next

java - 从 Sphinx4 运行 JSGFDemo 时出错

java - 消除Java排序比较中的越界错误

java - 将颜色 RGB 转换为 HEX(整数结果)

python - 在 Pandas 中将字符串转换为时间增量

arrays - 如何在 iOS swift 中的字符串数组中查找子字符串的索引