2017-01-30 3 views
0

Ich habe eine seltsame Situation, die ich nicht herausfinden kann.C# Zwei Strings, optisch gleich, aber sie sind nicht gleich oder gleichwertig

Ich verwende ein Drittanbieter-Konvertierungs-Framework, das Einheiten in abgekürzter Form erwartet, z.B. "μV" ist MicroVolts

Aber wenn ich gehe, um die Zeichenfolge "μV" als MicroVolts zu analysieren, schlägt es fehl.

Ich kochte es auf die Tatsache herunter, dass die Abkürzungszeichenfolge, die ich übergebe, nicht gleich der Zeichenkette ist, die das Third-Party-Framework für Microvolts verwendet, obwohl sie identisch aussehen. Hier

ist der Ausgang der Direkt-Fenster, zu helfen, etwas Licht auf dem Zusammenhang Schuppen:

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 

ich den Wert erhalten habe, in dem Dritten Rahmen durch das Debuggen und das Kopieren des Wertes der Abkürzung I verwendet Sie wissen, dass sie für MicroVolts verwenden.

Jede Idee, warum zwei Saiten, obwohl das Aussehen aus genau den gleichen Zeichen besteht, nicht als gleichwertig betrachtet werden?

Ich habe im Vergleich auch das erste Zeichen, die Mikroeinheit Darstellung, zwischen den beiden Strings, die ergibt:

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

*********** zu AKTUALISIEREN ****** ********** So habe ich festgestellt, dass die zwei Mikro-Zeichen unterschiedliche Kodierungen sind.

Aber wenn ich die gleiche Codierung zu verwenden versuchen, das Ziel-Framework verwendet, Visual Studio gibt mir diese Meldung:

enter image description here

Was die Auswirkungen der Änderung die Codierung des file..should I sind tue ich das oder sollte ich mit dem Framework-Autor zusammenarbeiten, damit sein Framework beide Codierungen verarbeiten kann?

+0

Cool, Prost. Wo hast du diese Informationen gefunden? – JTech

+1

https://dotnetfiddle.net/vNYAzb. Zwei verschiedene Unicode Charcaters – Hakunamatata

+0

http://stackoverflow.com/questions/20674577/how-to-compare-unicode-characters-that-look-alike Das gleiche Problem wie das, was Sie haben – Hakunamatata

Antwort

2

Stellt sich heraus, es zwei Unicode-Zeichen sind, die in den meisten Schriftarten wahrscheinlich identisch sind:

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

Sie sie beide in Strings zugreifen können, die \ mit u entkommen:

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