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