2017-01-30 97 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"); 
相关问题