Nasıl C bir unicode dize karakterleri saymak için
Bir dize var diyelim:
char theString[] = "你们好āa";
Verilen bu benim kodlama utf-8, bu dize 12 bayt uzunluğunda (üç hanzi karakter her üç bayt, latin karakteri ile bilgiler bulunuyor iki bayt, ve 'bir' bayt:
strlen(theString) == 12
Nasıl karakter sayısını alabilir miyim? Nasıl ki subscripting: eşdeğer yapabilirim
theString[3] == "好"
Nasıl dilim, ve bu dizeleri kedi miyim?
CEVAP
Sadece üst iki bit karakterleri 10
(yani, her şey 0x80
daha az veya 0xbf
Daha fazla) için ayarlanmamış Kont.
Üst iki bit 10 ** ayarlı tüm karakterler UTF-8 devamı bayt çünkü.
here strlen
UTF-8 dize üzerinde nasıl çalıştığını kodlama bir açıklaması için, bkz.
Dilimleme ve kesme için UTF-8 dizeleri, temelde aynı kurallara uymak zorunda. Herhangi bir byte 0
biraz 11
dizisi ile başlayan UTF-8 kod noktası başlangıcıdır, Diğerleri devam karakterleri.
En iyi bahis eğer üçüncü parti bir kütüphane kullanmak istemiyorsanız eğer değil, sadece çizgisinde işlevleri sağlamak için
utf8left (char *destbuff, char *srcbuff, size_t sz);
utf8mid (char *destbuff, char *srcbuff, size_t pos, size_t sz);
utf8rest (char *destbuff, char *srcbuff, size_t pos;
almak için sırasıyla:
- sol
sz
UTF-8 dize bayt. sz
UTF-8 dizesi,pos
başlangıç bayt.- bir dize UTF-8 bayt geri kalanı,
pos
başlangıç.
Bu dizeler yeterince kendi amaçları için manipüle edebilmek için iyi bir yapı taşı olacak.
Nasıl dize dize geçtiği saymak için?...
Nasıl Unicode karakterleri " karşı...
Nasıl bir JSON dize yeni satır karakte...
Bir dize olmayan tüm yazdırılabilir ka...
Nasıl bir dize yeni çizgi karakterleri...