Concat阿拉伯语和英语字符串与string.Format()

时间:2017-07-06 16:11:54

标签: c# string arabic latin

使用concat两个字符串有点麻烦。

return string.Format("{0}{1}{2}",
            IdWithSubType,

            ExtraInfo.Any(info => info.InfoType == UniExtraInfoType.Alias)
            ? string.Format(" ({0})", string.Join(",", ExtraInfo.First(info => info.InfoType == UniExtraInfoType.Alias).Info))
            : "",

            Context != null
            ? string.Format(" ({0})", Context.IdWithSubType)
            : "");
当IdWithSubType,extrainfo和context有latin或kirillic符号时,它是可以的,但是IdWithSubType可以是阿拉伯语,并且连接是错误的。 例如,100252575)طائراتهليكوبت@ vk.com) 阿拉伯语和其他符号混合,但我需要像“这里阿拉伯语字符串”(100252575@vk.com。如果这个问题已经解决String.Format会很好。希望你的帮助。谢谢你

1 个答案:

答案 0 :(得分:3)

可能没有出现编码问题,只是RTL(从右到左)字符串如何作为LTR(从左到右)字符串的一部分排列。

通常用于双向格式化的2个字符标记LTR和& RTL部分,分配为0x200e(LTR)& 0x200f(RTL)。在这种情况下,使用0x200e标记RTL部分的结尾(阿拉伯语)并启动LTR部分:

string leftToRight = ((char)0x200E).ToString();

// using string.Format
return string.Format("{0}{1}{2}{3}",
            IdWithSubType,
            leftToRight,

            ExtraInfo.Any(info => info.InfoType == UniExtraInfoType.Alias)
            ? string.Format(" ({0})", string.Join(",", ExtraInfo.First(info => info.InfoType == UniExtraInfoType.Alias).Info))
            : "",

            Context != null
            ? string.Format(" ({0})", Context.IdWithSubType)
            : "");,

// alternative: using string.Join
return string.Join(leftToRight, IdWithSubType,
            ExtraInfo.Any(info => info.InfoType == UniExtraInfoType.Alias)
            ? string.Format(" ({0})", string.Join(",", ExtraInfo.First(info => info.InfoType == UniExtraInfoType.Alias).Info))
            : "",

            Context != null
            ? string.Format(" ({0})", Context.IdWithSubType)
            : "");,

演示:.NET Fiddle Example

类似问题:

incorrect right to left concatenation english and Arabic

Problem creating correct path concatenating left to right with right to left sections