SORU
4 EYLÜL 2011, Pazar


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
4 EYLÜL 2011, Pazar


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.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 0TACTICAL0HIPPY0

    0TACTICAL0HI

    30 EYLÜL 2012
  • ecf150king

    ecf150king

    20 Ocak 2006
  • Willie D.

    Willie D.

    16 Aralık 2006