gpt4 book ai didi

c# - 为什么字符串 "\u0022"以这个字符串 "\u204D"开头

转载 作者:太空狗 更新时间:2023-10-29 23:50:52 26 4
gpt4 key购买 nike

为什么在 .net (Windows 8) 下这个字符串比较返回 true?

"\u0022".StartsWith("\u204D");

这在所有文化中都是正确的,如果您将 StartsWith 切换为 Equals,它会返回 false。

对于 StartsWith 比较,有许多不同的字符返回 true。这是奇怪的 Unicode 规则的一部分,还是 Windows 在这里有自己的规则?

最佳答案

了解依赖于文化的字符串比较的规则并不容易。标点符号 U+0022 " (QUOTATION MARK) 和 U+204D (BLACK RIGHTWARDS BULLET) 在文化比较下被认为是“足够平等”(包括不变文化的那些)。这些例子都表明:

// culture-sensitive:

Console.WriteLine("\"".StartsWith("⁍"));
Console.WriteLine("⁍".StartsWith("\""));
Console.WriteLine("\"".StartsWith("⁍", StringComparison.InvariantCulture));
Console.WriteLine("⁍".StartsWith("\"", StringComparison.InvariantCulture));

Console.WriteLine("\"".Equals("⁍", StringComparison.CurrentCulture));
Console.WriteLine("⁍".Equals("\"", StringComparison.CurrentCulture));
Console.WriteLine("\"".Equals("⁍", StringComparison.InvariantCulture));
Console.WriteLine("⁍".Equals("\"", StringComparison.InvariantCulture));

Console.WriteLine(StringComparer.CurrentCulture.Equals("\"", "⁍"));
Console.WriteLine(StringComparer.CurrentCulture.Equals("⁍", "\""));
Console.WriteLine(StringComparer.InvariantCulture.Equals("\"", "⁍"));
Console.WriteLine(StringComparer.InvariantCulture.Equals("⁍", "\""));

Console.WriteLine("\"".CompareTo("⁍"));
Console.WriteLine("⁍".CompareTo("\""));

Console.WriteLine(StringComparer.CurrentCulture.Compare("\"", "⁍"));
Console.WriteLine(StringComparer.CurrentCulture.Compare("⁍", "\""));
Console.WriteLine(StringComparer.InvariantCulture.Compare("\"", "⁍"));
Console.WriteLine(StringComparer.InvariantCulture.Compare("⁍", "\""));

可以给出其他示例,例如 string 上的 static 方法,但它们是等效的。

通过序数比较,U+0022 肯定不同于(小于)U+204D(这很简单!):

// ordinal:

Console.WriteLine("\"".StartsWith("⁍", StringComparison.Ordinal));
Console.WriteLine("⁍".StartsWith("\"", StringComparison.Ordinal));

Console.WriteLine("\"".Equals("⁍"));
Console.WriteLine("⁍".Equals("\""));

Console.WriteLine(StringComparer.Ordinal.Equals("\"", "⁍"));
Console.WriteLine(StringComparer.Ordinal.Equals("⁍", "\""));

Console.WriteLine(StringComparer.Ordinal.Compare("\"", "⁍"));
Console.WriteLine(StringComparer.Ordinal.Compare("⁍", "\""));

关于c# - 为什么字符串 "\u0022"以这个字符串 "\u204D"开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27974514/

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