2017-01-30 50 views
0

我有一個奇怪的情況,我想不通。C#兩個字符串,在視覺上相同,但它們不是相等也不等於

我正在使用第三方轉換框架,期望縮寫形式的單位例如「微伏」這是MicroVolts

但是當我去解析字符串「μV」MicroVolts失敗。

我把它歸結爲我傳入的縮寫字符串不等於第三方框架用於Microvolts的字符串,即使它們看起來相同。

這裏是立即窗口的輸出,以幫助擺脫上下文一些輕:

targetUom 
"µV" 
targetUom.GetHashCode() 
-837503221 
"μV".GetHashCode() 
-837502956 
targetUom.Equals("µV") // This is using the value of targetUom 
true 
targetUom.Equals("μV") // This is using the value from the 3rd party framework 
false 

我已經獲得通過調試第三方框架使用的價值和複製的縮寫我的價值知道他們用於MicroVolts。

任何想法爲什麼兩個字符串,即使外觀由完全相同的字符組成,不會被認爲是相等的?

我也比較的第一個字符,則微單元的表示,這兩個字符串其產生之間:

'μ'.CompareTo(targetUom[0]) 
775 

*********** ****** UPDATE ********** 所以我發現這兩個微字符是不同的編碼。

但是,當我嘗試使用目標框架使用相同的編碼,Visual Studio中給了我這個消息:

enter image description here

有什麼改變file..should我的編碼的含義要做到這一點,還是應該與框架作者合作,使他們的框架能夠處理這兩種編碼?

+0

很酷,歡呼。你從哪裏找到這些信息? – JTech

+1

https://dotnetfiddle.net/vNYAzb。兩個不同的Unicode字符 – Hakunamatata

+0

http://stackoverflow.com/questions/20674577/how-to-compare-unicode-characters-that-look-alike同樣的問題,你在做什麼 – Hakunamatata

回答

2

原來有兩個Unicode字符,這可能是相同的大多數字體:

  1. Greek small letter mu, U+03BC
  2. Micro sign, U+00B5

您可以在字符串中使用\ u轉義訪問他們兩個:

Console.WriteLine("Greek small letter mu: \u03bc"); 
Console.WriteLine("Micro sign: \u00b5"); 
相關問題