2013-02-19 60 views
1

我正在尝试通过序列号查找证书。 显然,双方都是平等的,但调试者说他们不是。 我在这里错过了什么?我注意到IDE在我将&粘贴 序列号复制到文本编辑器时发出警告,我并不关心该消息; 的unicode等等等等......如何比较文本:ANSI vs Unicode

UPDATE

  1. 我复制从证书窗口中的序列号。
  2. 打开Notepad2新文件。它是默认的ANSI。粘贴文本。再次复制。粘贴到VS.值不相等。
  3. 将Notepad2文件设置为Unicode。粘贴的序列号。从记事本2复制并粘贴到VS.现在他们是平等的。

它似乎unicode与ansi问题。

serial.png

+0

你能不能张贴实际的代码,而不是可怕的难以阅读的位图? – 2013-02-19 09:42:44

回答

3

我看不出你如何创建字符串或你如何比较它。这应该工作得很好。 .NET中的字符串总是unicode,所以也没有可能的编码问题。

手动重新输入串行字符串。看起来你粘贴了一些不寻常的角色,例如非破坏性空间而不是常规空间。

+0

我用手键入空格然后修剪。没有运气。 – 2013-02-19 09:45:37

+1

@NimeCloud:尝试重新键入整个字符串,包括引号。在那里可能有一个零宽度字符,根本不可见。例如,Unicode有一个零宽度空间。 – Guffa 2013-02-19 09:50:10

-2

而不是

operator== 

你应该使用

string.Equals(object Obj) 

方法。 “==”测试引用的相等性而不是内容。

参见MSDN作进一步参考。

+2

这是不正确的!对于字符串,它不测试引用,它仍然测试内容 – 2013-02-19 09:24:34

+0

检查[this](http://www.yoda.arachsys.com/csharp/strings.html)!在内部它指的是Equals方法,除此之外不像混淆“==”那样令人困惑。 – 2013-02-19 09:28:28

+0

Jon的那篇文章如何解决手头的问题? – 2013-02-19 09:31:10

0

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

请您提供“可复制”代码,以便我可以在我的机器上进行检查吗? (PS:我感觉懒得打字..:o)

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

+1

“==”运算符不仅适用于值类型,它适用于实现它的类型,并且“String”类实现它。 – Guffa 2013-02-19 09:32:40

2

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

在记事本中出现如下:

?00 c4 aa b9 b1 08 90 5d 

这是十六进制字符3F(问号),如果它的unicode它不会出现在记事本中。在ANSI模式下,它变得可见?

diff.png