Ya no tienes que indagar más en internet ya que llegaste al sitio perfecto, poseemos la solución que deseas sin problema.
Solución:
Debido a que son símbolos realmente diferentes, incluso si se ven iguales, primero es la letra real y tiene carácter. code = 956 (0x3BC)
y el segundo es el signo micro y tiene 181 (0xB5)
.
Referencias:
- Carácter Unicode ‘LETRA MU MINÚSCULA GRIEGA’ (U+03BC)
- Carácter Unicode ‘MICRO SIGNO’ (U+00B5)
Entonces, si desea compararlos y necesita que sean iguales, debe manejarlo manualmente o reemplazar un carácter con otro antes de la comparación. O usa el siguiente código:
public void Main()
var s1 = "μ";
var s2 = "µ";
Console.WriteLine(s1.Equals(s2)); // false
Console.WriteLine(RemoveDiacritics(s1).Equals(RemoveDiacritics(s2))); // true
static string RemoveDiacritics(string text)
var normalizedString = text.Normalize(NormalizationForm.FormKC);
var stringBuilder = new StringBuilder();
foreach (var c in normalizedString)
var unicodeCategory = CharUnicodeInfo.GetUnicodeCategory(c);
if (unicodeCategory != UnicodeCategory.NonSpacingMark)
stringBuilder.Append(c);
return stringBuilder.ToString().Normalize(NormalizationForm.FormC);
y la demostración
En muchos casos, puede normalizar ambos caracteres Unicode a una determinada forma de normalización antes de compararlos, y deberían poder coincidir. Por supuesto, qué forma de normalización necesita usar depende de los caracteres mismos; solo porque ellos Mira iguales no significa necesariamente que representen al mismo personaje. También debe considerar si es apropiado para su caso de uso; consulte el comentario de Jukka K. Korpela.
Para esta situación particular, si consulta los enlaces en la respuesta de Tony, verá que la tabla para U+00B5 dice:
Descomposición
LETRA GRIEGA MINÚSCULA MU (U+03BC)
Esto significa que U+00B5, el segundo carácter de la comparación original, puede descomponerse en U+03BC, el primer carácter.
Por lo tanto, normalizará los caracteres mediante la descomposición de compatibilidad total, con las formas de normalización KC o KD. Aquí hay un ejemplo rápido que escribí para demostrar:
using System;
using System.Text;
class Program
static void Main(string[] args)
char first = 'μ';
char second = 'µ';
// Technically you only need to normalize U+00B5 to obtain U+03BC, but
// if you're unsure which character is which, you can safely normalize both
string firstNormalized = first.ToString().Normalize(NormalizationForm.FormKD);
string secondNormalized = second.ToString().Normalize(NormalizationForm.FormKD);
Console.WriteLine(first.Equals(second)); // False
Console.WriteLine(firstNormalized.Equals(secondNormalized)); // True
Para obtener detalles sobre la normalización de Unicode y las diferentes formas de normalización, consulte System.Text.NormalizationForm
y la especificación Unicode.
Ambos tienen diferentes códigos de caracteres: consulte esto para obtener más detalles.
Console.WriteLine((int)'μ'); //956
Console.WriteLine((int)'µ'); //181
Donde, el primero es:
Display Friendly Code Decimal Code Hex Code Description
====================================================================
μ μ μ μ Lowercase Mu
µ µ µ µ micro sign Mu