首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#两个字符串,在视觉上是相同的,但它们既不相等也不等价

C#两个字符串,在视觉上是相同的,但它们既不相等也不等价
EN

Stack Overflow用户
提问于 2017-01-30 04:47:27
回答 1查看 839关注 0票数 0

我有个奇怪的情况我搞不懂。

我使用的是一个第三方转换框架,它期望单位以缩写形式出现,例如"μV“,即μ

但是当我将字符串"μV“解析为μ时,它就失败了。

我把它归结为一个事实,即我传入的缩写字符串并不等于第三方框架用于微伏特的字符串,尽管它们看起来是相同的。

下面是即时窗口的输出,以帮助了解上下文:

代码语言:javascript
运行
复制
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的缩写的值,我获得了第三方框架中使用的值。

你知道为什么两个字符串,即使看起来是由完全相同的字符组成的,也不会被认为是平等的?

我还比较了第一个字符,微单位表示,在两个字符串之间产生:

代码语言:javascript
运行
复制
'μ'.CompareTo(targetUom[0])
775

*更新*我发现这两个微字符编码不同。

但是,当我尝试使用与目标框架相同的编码时,Visual会给出以下消息:

更改file..should的编码意味着什么?或者我是否应该与框架作者协作,使他们的框架能够处理这两种编码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-30 05:03:22

结果发现,在大多数字体中,可能有两个unicode字符是相同的:

  1. 希腊文小写字母mu,U+03BC
  2. 微符号,U+00B5

您可以使用\u转义在字符串中访问它们:

代码语言:javascript
运行
复制
Console.WriteLine("Greek small letter mu: \u03bc");
Console.WriteLine("Micro sign: \u00b5");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41929158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档