C# 如何比较文本:ANSI与Unicode

C# 如何比较文本:ANSI与Unicode,c#,C#,我正试图通过序列号查找证书。 显然双方是平等的,但调试器说他们不是。 我错过了什么?我在复制和粘贴时注意到IDE警告我 序列号变成文字编辑器,我不在乎留言; 别说废话 更新 我从证书窗口复制了序列号 打开Notepad2新文件。这是默认的ANSI。粘贴文本。再次抄袭。粘贴到的与值不相等 将Notepad2文件设置为Unicode。粘贴的序列号。从Notepad2复制并粘贴到VS中。现在它们相等 这似乎是unicode和ansi的问题 而不是 operator== 你应该使用 string.Eq

我正试图通过序列号查找证书。 显然双方是平等的,但调试器说他们不是。 我错过了什么?我在复制和粘贴时注意到IDE警告我 序列号变成文字编辑器,我不在乎留言; 别说废话

更新

  • 我从证书窗口复制了序列号
  • 打开Notepad2新文件。这是默认的ANSI。粘贴文本。再次抄袭。粘贴到的与值不相等
  • 将Notepad2文件设置为Unicode。粘贴的序列号。从Notepad2复制并粘贴到VS中。现在它们相等
  • 这似乎是unicode和ansi的问题

    而不是

    operator==
    
    你应该使用

    string.Equals(object Obj)
    
    方法。“==”测试引用内容是否相等


    请参阅以获取更多参考。

    据我所知,在使用英文字母数字时,UNICODE中的比较是完美的。对于其他语言,有一些警告

    请提供“可复制”代码,以便我可以在我的机器上进行检查?(附言:我觉得自己太懒了,打不出来……:o)


    另外,请注意==仅适用于值类型。您应该使用EqualsTo()来比较ref类型(这样,您将比较值,而不是引用!)

    我看不出您如何创建字符串或如何比较它有任何错误。那应该行得通。NET中的字符串始终是unicode,因此也没有可能的编码问题


    手动重新键入序列字符串。粘贴时,似乎有一些不寻常的字符,例如不间断空格而不是常规空格。

    复制时,我选择了“额外空格”。很奇怪,但它没有出现在IDE中。如果我仔细选择序列号,一切都会好的

    在记事本中,它显示如下:

    ?00 c4 aa b9 b1 08 90 5d
    
    它是十六进制3F字符(问号),如果是unicode,它不会出现在记事本中。在ANSI模式下,它将显示为


    那是不正确的!对于字符串,它不测试引用,它仍然测试contentsCheck out!在内部,它指的是Equals方法,除此之外,它不像沉思“==”那样令人困惑。这是关于我的语句,您应该使用string.Equals()而不是操作符==。操作符
    =
    不仅适用于值类型,还适用于实现它的类型,而
    String
    类确实实现了它。难道你不能发布实际的代码,而不是读起来非常困难的位图吗?我手动键入空格,然后进行修剪。运气不好。@NimeCloud:尝试重新键入整个字符串,包括引号。其中可能有一个零宽度字符,根本不可见。例如,Unicode具有零宽度空间。