SORU
19 Aralık 2013, PERŞEMBE


Nasıl Unicode karakterleri " karşılaştırmak için;birbirine benzer"?

Şaşırtıcı bir sorunu içine düşerim.

Benim uygulama bir metin dosyası yükledim ve değeri µ sahip karşılaştıran bir mantık var.

Ve eğer bu metinler aynı olsa bile değer false karşılaştırın fark ettim.

 Console.WriteLine("μ".Equals("µ")); // returns false
 Console.WriteLine("µ".Equals("µ")); // return true

Daha sonra çizgi karakter µ kopya yapıştırılır.

Ancak, bu böyle tek karakter olabilir.

Orada herhangi bir şekilde C# aynı görünüyor ama aslında farklı olan karakterleri karşılaştırmak için?

CEVAP
19 Aralık 2013, PERŞEMBE


Birçok durumda, onları karşılaştırarak önce bazı normalleştirme forma normalize Unicode karakterleri de yapabilirsiniz ve MAÇ gerekir. Kullanmak için ihtiyacınız olan tabii ki, çünkü karakterler kendilerini bağlıbakhem ille de aynı karakteri temsil etmek anlamına gelmez. Ayrıca eğer uygunsa kullanın davanız için düşünün — K. Jukka Korpela yorum görmek istiyorum.

Eğer Tony's answer, bağlantıları başvurursanız bu özel durum için, U 00B5 tablo diyor ki:

Bozunma <uyumluluğu> YUNANCA KÜÇÜK HARF MU (U 03BC)

Bu U 00B5, orijinal karşılaştırıldığında, ikinci karakteri U için çürümüş olabilir 03BC, ilk karakter.

Karakterleri tam uyumluluk ayrışma kullanarak normalize edeceksin, normalleştirme formları KC veya KD. Burada hızlı bir örnek, Yukarı göstermek için yazdım:

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
    }
}

Unicode normalleştirme ve farklı normalleştirme formları hakkında ayrıntılar System.Text.NormalizationForm the Unicode spec bölümünde bulabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Flohoo

    Flohoo

    12 EYLÜL 2009
  • Jason Parker

    Jason Parker

    14 Aralık 2009
  • NicoleGrippo

    NicoleGrippo

    14 Kasım 2006