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

  • Missouri Star Quilt Company

    Missouri Sta

    18 ŞUBAT 2009
  • theavettbrothers

    theavettbrot

    9 ŞUBAT 2007
  • TSE

    TSE

    12 Kasım 2012