SORU
14 HAZİRAN 2013, Cuma


Ne kadar iyi C 11 Unicode desteklenir?

Okumak C 11 destekler Unicode duydum. Bu konuda bir kaç soru:

  • Ne kadar iyi C standart kütüphane Unicode destekliyor mu?
  • std::string gerektiği gibi çalışmaz mı?
  • Nasıl kullanırım?
  • Nerede potansiyel sorunlar var?

CEVAP
14 HAZİRAN 2013, Cuma


Ne kadar iyi C standart kütüphane unicode destekliyor mu?

Çok.

Unicode desteği sağlayabilir kütüphane imkanlar sayesinde hızlı tarama bana verir bu liste:

  • Dizeleri kütüphane
  • Yerelleştirme kütüphane
  • Giriş çıkış kitaplığı/
  • Düzenli ifade Kütüphanesi

İlk ama korkunç destek sağlamak sanırım. Tekrar diğer sorular üzerinden hızlı bir yol sonra daha detaylı bakarım.

std::string gerektiği gibi çalışmaz mı?

Evet. C standardına göre std::string ve eşdeğerleri yapması gereken şey budur:

Şablonu basic_string sınıfı char gibi nesneleri sıfır konumunda dizinin ilk elemanı ile bir dizi keyfi farklı sayıda oluşan mağaza nesneleri açıklar.

İyi, std::string gayet iyi yapıyor. Unicode özgü herhangi bir işlevsellik sağlar mı? Hayır.

Değil mi? Muhtemelen değil. std::string char nesneleri bir dizi olarak gayet iyi. Kullanışlı; sadece sıkıntı metin alt düzey bir görünüm ve standart C üst düzey bir sağlamaz.

Nasıl kullanırım?

char nesneleri bir dizi olarak kullanmak; başka bir şey olmamış gibi, acı son kaçınılmaz.

Nerede potansiyel sorunlar var?

Her yerde? Bakalım...

Dizeleri kütüphane

Dizeleri kütüphane bize sadece standart olarak adlandırdığı bir dizi olan basic_string sağlar, "char-gibi nesneleri". Onlara kod birimi " diyorum. Eğer metin üst düzey bir görünüm istiyorsanız, bu sizin için ne arıyorsanız değil. Bu metin serileştirme için uygun bir görünümdür/kaldırma/saklama.

Ayrıca bazı araçlar sağlar C kütüphanesi de olabilir, köprü boşluğu arasında dar bir dünya ve Unicode dünya: c16rtomb/mbrtoc16 ve c32rtomb/mbrtoc32.

Yerelleştirme kütüphane

Yerelleştirme kütüphane hala o inanıyor "char-gibi nesneleri" bir "karakter" eşittir. Bu tabii ki çok saçma ve imkansız şeyler düzgün ASCII Unicode gibi bazı küçük alt çalışma ötesinde çok da kolay.

Standart "" <locale> başlık: kolaylık arabirimleri dediği, örneğin, göz önünde bulundurun

template <class charT> bool isspace (charT c, const locale& loc);
template <class charT> bool isprint (charT c, const locale& loc);
template <class charT> bool iscntrl (charT c, const locale& loc);
// ...
template <class charT> charT toupper(charT c, const locale& loc);
template <class charT> charT tolower(charT c, const locale& loc);
// ...

Nasıl bu fonksiyonların düzgün, diyelim ki, U 1F34C ʙᴀɴᴀɴᴀ, u8"&olarak kategorize bekliyorsunuz

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008
  • The Verge

    The Verge

    8 AĞUSTOS 2006