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

本文关键字:越南语 unicode 字符串 比较 | 更新日期: 2023-09-27 18:13:50

我有以下代码:

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");
}

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

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

Ð不是Đ

第一个"D"是ANSI字符208,第二个是272。

我使用

进行测试
(int)'Ð'
(int)'Đ'

这些是不同的字符,它们看起来是一样的,但实际上不是。

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

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

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

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();