C#.Replace()方法不适用于阿拉伯语

时间:2019-06-13 11:28:04

标签: c#

我正在使用.Replace()方法替换阿拉伯语占位符[CITY]

public static void Main()
{
    Console.WriteLine("Hello World");
    var replace = "سنغافورة";
    var input = "ABC [CITY] مرحبا بالعالم";
    Console.WriteLine(input);
    var final = input.Replace("[CITY]", replace);
    Console.WriteLine(final);
}

我得到以下输出

ABC [CITY] مرحبا بالعالم
ABC سنغافورة مرحبا بالعالم

您可以看到,城市而不是被放置在ABC的最右边。

此问题仅适用于阿拉伯语,适用于其他语言(英语/泰语/西班牙语等)

不确定这是怎么回事。

C#小提琴-https://dotnetfiddle.net/mvIcHt

2 个答案:

答案 0 :(得分:2)

使用此答案:This

我已经为此编辑了您的代码

public static void Main()
{
    Console.WriteLine("Hello World");
    var replace = "سنغافورة";
    var input = "York Hotel في [CITY] – عروض الغرف، صور وتقييمات";
    Console.WriteLine(input);
    var lefttoright = ((Char)0x200E).ToString();
    var final = input.Replace("[CITY]", lefttoright + replace + lefttoright );
    Console.WriteLine(final);

}

输出为:

Hello World
York Hotel في [CITY] – عروض الغرف، صور وتقييمات
York Hotel في ‎سنغافورة‎ – عروض الغرف، صور وتقييمات

引用@Takarii:

  

Char 0x200E是一个特殊字符,它告诉以下文本:   从左到右see here阅读有关该字符的更多信息。

答案 1 :(得分:1)

只需在阿拉伯文本的开头添加一个RTL标记:

public static void Main()
{
    Console.WriteLine("Hello World");

    const char rtl = (char)0x200E;
    var replace = "سنغافورة";

    var input = "York Hotel في [CITY] – " + rtl + "عروض الغرف، صور وتقييمات";
    Console.WriteLine(input);
    var final = input.Replace("[CITY]", replace);
    Console.WriteLine(final);
}

更新: 通过了这里的答案:https://stackoverflow.com/a/44961348/6193089