首页 文章

为什么字符串“\ u0022”以此字符串“\ u204D”开头

提问于
浏览
5

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

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

在所有文化中都是如此,如果将StartsWith切换为Equals,则返回false .

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

1 回答

  • 0

    要知道依赖于文化的字符串比较有哪些规则并不容易 . 在文化比较(包括不变文化的那些)下,标点符号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("⁍", "\""));
    

相关问题