2017-01-30 3 views
0

私は理解できない奇妙な状況があります。C#2つの文字列、視覚的に同じ、まだそれらは等しくない等価

私は第三者の変換フレームワークを使用しています。 "μV"は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 

私はデバッグにより、サードパーティのフレームワークで使用される値を取得し、略語Iの値をコピーしていますそれらがMicroVoltsのために使用することを知ってください。

2つの文字列は、同じ文字で構成されているように見えますが、等しいとはみなされません。

私も生み出す2つの文字列の間の最初の文字、マイクロ単位の表現、比較しました

:****** UPDATE ***********

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

を********** 私は2つのマイクロ文字が異なるエンコーディングであることを発見しました。

しかし、私は、ターゲットフレームワークが使用するのと同じエンコーディングを使用しようとすると、Visual Studioは私にこのメッセージを表示します。

enter image description here

file..should Iのエンコーディングを変更することの意味は何またはフレームワークの作成者と協力して、両方のエンコーディングを処理するフレームワークを有効にする必要がありますか?

+0

クール、歓声。あなたはその情報をどこで見つけましたか? – JTech

+1

https://dotnetfiddle.net/vNYAzb。 2つの異なるユニコードのキャラクター – Hakunamatata

+0

http://stackoverflow.com/questions/20674577/how-to-compare-unicode-characters-that-look-alikeあなたが持っているものと同じ問題 – Hakunamatata

答えて

2

ほとんどのフォントには、おそらく同じ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"); 
関連する問題