我有一个奇怪的情况,我无法弄清楚。
我正在使用第三方转换框架,该框架期望缩写形式的单位,例如“μ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
通过调试和复制我知道它们用于MicroVolts的缩写值,我获得了第三方框架中使用的值。
任何想法为什么两个字符串,即使看起来由完全相同的字符组成,也不会被视为相等?
我还比较了两个字符串之间的第一个字符,微单位表示,产生:
'μ'.CompareTo(targetUom[0])
775
***********更新**************** 所以我发现两个微字符是不同的编码。
但是当我尝试使用目标框架使用的相同编码时,Visual Studio会给我这样的信息:
更改文件编码的含义是什么?我应该这样做,还是应该与框架作者协作以使他们的框架能够处理这两种编码?
答案 0 :(得分:2)
原来有两个unicode字符在大多数字体中可能都是相同的:
您可以使用\ u escape:
在字符串中访问它们Console.WriteLine("Greek small letter mu: \u03bc");
Console.WriteLine("Micro sign: \u00b5");