You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用Unicode方向格式化代码实现阿拉伯语、英语与数字的双向混排

阿拉伯语、英语、数字混合零额外字符排版问题

需求背景

现有业务要求实现阿拉伯语词汇、英语词汇与数字的混合排版,不得在内容中间插入任何特殊字符。
最初的方案为检测到阿拉伯语文本时使用U+202C(弹出方向格式化代码),但该方案会向文件中注入额外的非打印字符,不符合合规要求:

银行系统协议对文件大小有严格规定,每个位位置对应的字符数量必须完全遵循指定要求,不可出现额外字符。

后续优化方案改为在行首插入一个控制字符,但仍未找到完全不插入任何字符的解决方案,求可行思路。

现有实现代码(Java)

String arabicStr ="المهتار";
String englishStr = "6abc";
System.out.println("Without any special character injected");
System.out.println(arabicStr+englishStr);

// Creating array of string length
char[] ch = new char[arabicStr.length() + englishStr.length()+1];
// Force following characters to be treated as strong left-to-right characters.
ch[0] = '\u202D';
// Copy Arabic character by character into array, in reverse direction
int i =0;
int j =1;
for (i = arabicStr.length()-1; i >=0 ; i--) {
    ch[j] = arabicStr.charAt(i);
    j++;
}
i= arabicStr.length()+1;
for(int n =0; n<englishStr.length(); n++ )
{
    ch[i]=englishStr.charAt(n);
    i++;
}
System.out.print("With strict left to right reversed Arabic: "); 
for (int pos =0; pos< ch.length; pos++ ) {
    System.out.print(ch[pos]);
}

运行输出结果

Without any special character injected
المهتار6abc
With strict left to right reversed Arabic: ‭راتهملا6abc

实现逻辑说明

当前实现逻辑为:不管文本是阿拉伯语还是英语,全局强制使用从左到右的显示规则,同时将阿拉伯语文本反转。
该混排问题仅出现在阿拉伯语词汇后接字母或数字的场景,根源是双向算法无法判断数字属于阿拉伯语还是英语词汇。


内容的提问来源于stack exchange,提问作者Tirthankar Mitra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:27:04