如何在C#中比较亚洲(越南/ unicode)字符串?

时间:2016-10-19 12:47:22

标签: c#

我有以下代码:

Thread.CurrentThread.CurrentCulture = new CultureInfo("vi-VN");

string a = "Biển Ðông";
string b = "Biển Đông";

if (a.Equals(b, StringComparison.CurrentCulture))
{
    Console.WriteLine("Yes");
}

这两个字符串是相同的,但在使用false进行检查时,我总是得到Equals。如果我将其添加到HashSet<string>,那么我将在容器中获得两个项目而不是一个项目。

3 个答案:

答案 0 :(得分:4)

Ð不是Đ

第一个&#34; D&#34;是ANSI字符208,第二个是272。

我使用

测试了这个
(int)'Ð'
(int)'Đ'

这些是不同的字符,看起来相同,但不是。

答案 1 :(得分:2)

你的字符串由以下字符组成:

\u0042\u0069\u1ec3\u006e \u00d0\u00f4\u006e\u0067
                            |||
\u0042\u0069\u1ec3\u006e \u0110\u00f4\u006e\u0067

答案 2 :(得分:0)

通过这个逻辑你可以找到,第一个字符在字符串中是不同的。在这种情况下它可能很有用。

char? firstocurrenceA = string1.Zip(string2, (a, b) => new { string1 = a, string2 = b })
    .Where(x => x.string1 != x.string2)
    .Select(x => x.string1)
    .FirstOrDefault();

        char? firstocurrenceB = string1.Zip(string2, (a, b) => new { string1 = a, string2 = b })
    .Where(x => x.string1 != x.string2)
    .Select(x => x.string2)
    .FirstOrDefault();