我有个奇怪的情况我搞不懂。
我使用的是一个第三方转换框架,它期望单位以缩写形式出现,例如"μV“,即μ
但是当我将字符串"μV“解析为μ时,它就失败了。
我把它归结为一个事实,即我传入的缩写字符串并不等于第三方框架用于微伏特的字符串,尽管它们看起来是相同的。
下面是即时窗口的输出,以帮助了解上下文:
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会给出以下消息:
更改file..should的编码意味着什么?或者我是否应该与框架作者协作,使他们的框架能够处理这两种编码?
发布于 2017-01-30 05:03:22
结果发现,在大多数字体中,可能有两个unicode字符是相同的:
您可以使用\u转义在字符串中访问它们:
Console.WriteLine("Greek small letter mu: \u03bc");
Console.WriteLine("Micro sign: \u00b5");
https://stackoverflow.com/questions/41929158
复制相似问题