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
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ş: YORUMLAR
SPONSOR VİDEO
İLGİLİ SORU / CEVAPLAR
Nasıl Python bir sayı KADAR yuvarlak m...
Python unicode dizesi aksan kaldırmak ...
Ne kadar Esnek bir Eklenti Mimarisi Ol...
Toplam sembolü çıkıyor nasıl ayarlamak...
Ne kadar önemli dizinler sütun sırası ...