2017-01-30 8 views
0

У меня странная ситуация, я не могу понять.C# Две строки, визуально одинаковые, но они не равны и не эквивалентны

Я использую стороннюю структуру преобразования, которая ожидает единицы в сокращенной форме, например. «μ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.

Любая идея, почему две строки, даже если внешний вид состоит из одинаковых символов, не будут считаться равными?

Я также сравнил первый символ, микро единичного представления, между двумя строками, которая дает:

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

*********** UPDATE ****** ********** Итак, я обнаружил, что два микросимвола отличаются друг от друга.

Но когда я пытаться использовать ту же кодировку, которая использует целевой каркас, Visual Studio дает мне это сообщение:

enter image description here

Какова прикосновенность изменения кодировки file..should I делать это или я должен сотрудничать с автором структуры, чтобы позволить их структуре обрабатывать оба кодирования?

+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

Оказывается, есть два юникод символы, которые, вероятно, идентичны в большинстве шрифтов:

  1. Greek small letter mu, U+03BC
  2. Micro sign, U+00B5

Вы можете получить доступ к ним как в строках с помощью \ и бежать:

Console.WriteLine("Greek small letter mu: \u03bc"); 
Console.WriteLine("Micro sign: \u00b5");