2013-02-19 59 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