gpt4 book ai didi

c# - 如何比较 "look alike"的 Unicode 字符?

转载 作者:IT王子 更新时间:2023-10-29 03:36:31 27 4
gpt4 key购买 nike

我陷入了一个令人惊讶的问题。

我在我的应用程序中加载了一个文本文件,我有一些逻辑来比较具有 µ 的值。

而且我意识到即使文本相同,比较值也是错误的。

 Console.WriteLine("μ".Equals("µ")); // returns false
Console.WriteLine("µ".Equals("µ")); // return true

在后面一行中,字符 µ 被复制粘贴。

但是,这些可能不是唯一这样的字符。

在C#中有什么方法可以比较看起来相同但实际上不同的字符吗?

最佳答案

因为它是真正不同的符号,即使它们看起来相同,第一个是实际字母并且具有 char code = 956 (0x3BC) 第二个是微符号并且具有 181 ( 0xB5)

引用资料:

所以如果你想比较它们并且你需要它们相等,你需要手动处理,或者在比较之前用一个字符替换另一个字符。或者使用以下代码:

public void Main()
{
var s1 = "μ";
var s2 = "µ";

Console.WriteLine(s1.Equals(s2)); // false
Console.WriteLine(RemoveDiacritics(s1).Equals(RemoveDiacritics(s2))); // true
}

static string RemoveDiacritics(string text)
{
var normalizedString = text.Normalize(NormalizationForm.FormKC);
var stringBuilder = new StringBuilder();

foreach (var c in normalizedString)
{
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
{
stringBuilder.Append(c);
}
}

return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
}

还有 Demo

关于c# - 如何比较 "look alike"的 Unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20674577/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com