Mikroblog

Mikroblog

Könnyű

Utasítások

Felfedeztél egy rést a közösségi média piacán: a nagyon-nagyon rövid bejegyzésekre van igény. Mióta a Twitter engedélyezi a 280 karakteres bejegyzéseket, azok, akik gyors frissítéseket szeretnének megosztani a közösségi médiában, nem kapnak megfelelő szolgáltatást. Úgy döntesz, hogy létrehozod a saját közösségi hálózatodat.

Hogy a terméked figyelemre méltó legyen, szélsőségesre veszed a dolgot, és csak legfeljebb 5 karakteres bejegyzéseket engedélyezel. Az 5 karakternél hosszabb bejegyzéseket 5 karakterre kell csonkítani.

Hogy a felhasználóid teljesen kifejezhessék magukat, engedélyezed az emojikat és a többi Unicode-karaktert.

A feladat az, hogy a bemeneti stringeket 5 karakterre csonkítsd.

Szövegkódolások

A digitálisan tárolt szöveget byte-ok sorozatává kell alakítani. A karakterek byte-okhoz rendelésére három elterjedt megoldás van.

  • Az ASCII az angol nyelv karaktereit tudja kódolni. Minden karakter pontosan 1 byte hosszú.
  • A UTF-8 Unicode szövegkódolás. A karakterek 1 és 4 byte között foglalnak helyet.
  • A UTF-16 Unicode szövegkódolás. A karakterek vagy 2, vagy 4 byte hosszúak.

A UTF-8 és a UTF-16 is Unicode-kódolás, ami azt jelenti, hogy a karakterek hatalmas választékát képesek megjeleníteni, többek között:

  • a világ legtöbb nyelvén és írásrendszerében írt szövegeket
  • történelmi szövegeket
  • emojikat

A UTF-8 és a UTF-16 egyaránt változó hosszúságú kódolás, ami azt jelenti, hogy a különböző karakterek különböző mennyiségű helyet foglalnak el.

Vegyük például az 'a' betűt és a '😛' emojit. UTF-16-ban a betű 2 byte-ot foglal el, az emoji viszont 4 byte-ot.

Ebben a feladatban a trükk az, hogy a Unicode-karakterek (kódpontok) köré tervezett API-kat használd a Unicode-kódegységek helyett.

Unicode kódpontok és kódegységek.

Egy „normál” UTF-16-kódolású string karakterek sorozataként ábrázolható, ahol minden karakter legfeljebb 16 bit hosszú lehet (innen a UTF-16 név). Ez azt jelenti, hogy legfeljebb 2¹⁶ (kettő a tizenhatodikon), azaz 65536 karakter ábrázolható 16 bittel, ami 1 kódegység. Ez a 65536 karakter alkotja az úgynevezett Alap többnyelvű készlet készletet, amely elég nagy a legtöbb nyelv leggyakoribb karaktereihez.

Néhány szimbólum azonban nem fér el 1 kódegységben. A megoldás, hogy két kódegységgel ábrázoljuk őket. Ez a két UTF-16 kódegység, amit gyakran surrogate pair-nek is neveznek, egy kódpontot alkot.

Összefoglalva tehát, amikor UTF-16-kódolásról beszélünk:

  • A code unit 16 (vagy kevesebb) bit, amely egyetlen karaktert ábrázol.
  • A code point egy vagy két kódegység, amely egyetlen karaktert ábrázol.

Hogy még nagyobb legyen a zűrzavar, léteznek grapheme cluster-ek is, amelyek alapvetően Unicode-karakterek (kódpontok) sorozatai, és egyetlen vizuális egységként kell kezelni őket. Például néhány emoji, mint ez: 👨‍👦.

UTF-16 a Javascriptben

A legtöbb beépített Javascript-metódus működik UTF-16-kódolású stringekkel, viszont UTF-16 kódegységek alapján dolgozik. Például a String.prototype.split("") metódus kódegységek szerint bontja fel a stringet.

Másrészt a String iterators kódpontok szerint iterálnak.

A Unicode stringekről sokkal többet olvashatsz, és példákat is találhatsz az MDN oldalán.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
JavaScript Exercism

Készen állsz elkezdeni a(z) Mikroblog feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) JavaScript nyelvet 37 fogalom159 feladat segítségével, valódi emberi mentorálással, mindez ingyen.