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

在.NET C#中如何正确解析阿拉伯文本字符串的每个字符

C# 阿拉伯语字符串索引错位问题修复方案

问题根因

  • C# 中直接使用 string[index] 索引取值,基于 UTF-16 代码单元定位,并非用户视觉上可感知的单个「文本元素」,阿拉伯语部分复杂字符由多个代码单元组成,直接索引会出现取值错位。
  • 阿拉伯语属于从右到左(RTL)书写体系,字符的视觉展示顺序和内存中存储的逻辑顺序相反,直接按视觉顺序数下标取值必然和预期不符。你当前取到的ٻ是阿拉伯语片段逻辑顺序的首位字符,对应视觉上阿拉伯语片段的最右侧位置,和你预期的视觉位置错位。

正确处理方法

如果要按视觉感知的字符顺序遍历、取指定位置的字符,使用 System.Globalization.StringInfo 类处理文本元素即可:

示例代码

using System.Globalization;

// 你的业务字符串
string targetStr = "Arabic text: ٻڠڣڟگگښڏ";
StringInfo strInfo = new StringInfo(targetStr);

// 1. 获取字符串视觉可见的总字符数
int totalVisualCharCount = strInfo.LengthInTextElements;

// 2. 取指定位置的视觉字符(下标从0开始,示例取第13位则传12)
string expectChar = strInfo.SubstringByTextElements(12, 1);

// 3. 正确遍历所有视觉可见字符
for (int i = 0; i < strInfo.LengthInTextElements; i++)
{
    string currentVisualChar = strInfo.SubstringByTextElements(i, 1);
    // 业务逻辑处理
}

补充说明

如果需要完全匹配从右到左的视觉顺序取阿拉伯语部分的字符,提取出阿拉伯语片段的文本元素列表后,反转列表再按索引取值即可。不要用 char 类型接收阿拉伯语单个字符,部分复杂阿拉伯字符会占用2个char的存储空间,用string类型接收单个文本元素更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:03