Έχεις εντοπίσει ένα κενό στην αγορά των μέσων κοινωνικής δικτύωσης για πολύ πολύ σύντομες αναρτήσεις. Τώρα που το Twitter επιτρέπει αναρτήσεις 280 χαρακτήρων, οι άνθρωποι που θέλουν γρήγορες ενημερώσεις στα μέσα κοινωνικής δικτύωσης δεν εξυπηρετούνται. Αποφασίζεις να δημιουργήσεις το δικό σου δίκτυο κοινωνικής δικτύωσης.
Για να κάνεις το προϊόν σου αξιοσημείωτο, το κάνεις ακραίο και επιτρέπεις μόνο αναρτήσεις 5 ή λιγότερων χαρακτήρων. Οι αναρτήσεις με περισσότερους από 5 χαρακτήρες θα πρέπει να περικόπτονται στους 5.
Για να επιτρέψεις στους χρήστες σου να εκφράζονται πλήρως, επιτρέπεις emoji και άλλους χαρακτήρες Unicode.
Η εργασία είναι να περικόψεις συμβολοσειρές εισόδου στους 5 χαρακτήρες.
Το κείμενο που αποθηκεύεται ψηφιακά πρέπει να μετατραπεί σε μια σειρά από byte. Υπάρχουν 3 τρόποι αντιστοίχισης χαρακτήρων σε byte που χρησιμοποιούνται συνήθως.
Το UTF-8 και το UTF-16 είναι και οι δύο κωδικοποιήσεις Unicode, που σημαίνει ότι μπορούν να αναπαραστήσουν ένα τεράστιο εύρος χαρακτήρων, όπως:
Το UTF-8 και το UTF-16 είναι και οι δύο κωδικοποιήσεις μεταβλητού μήκους, που σημαίνει ότι διαφορετικοί χαρακτήρες καταλαμβάνουν διαφορετικό χώρο.
Σκέψου το γράμμα 'a' και το emoji '😛'. Στο UTF-16 το γράμμα καταλαμβάνει 2 byte, αλλά το emoji καταλαμβάνει 4 byte.
Το κόλπο σε αυτή την άσκηση είναι να χρησιμοποιήσεις API σχεδιασμένα με βάση τους χαρακτήρες Unicode (σημεία κώδικα) αντί για μονάδες κώδικα Unicode.
Μια "κανονική" συμβολοσειρά κωδικοποιημένη σε UTF-16 μπορεί να αναπαρασταθεί ως μια σειρά χαρακτήρων, όπου κάθε χαρακτήρας μπορεί να έχει μήκος έως 16 bit (εξ ου και το όνομα UTF-16). Αυτό σημαίνει ότι υπάρχουν το πολύ 2¹⁶ (δύο στη δέκατη έκτη δύναμη), ή 65536 πιθανοί χαρακτήρες που μπορούν να αναπαρασταθούν με 16 bit, ή 1 μονάδα κώδικα. Αυτοί οι 65536 χαρακτήρες αποτελούν αυτό που είναι γνωστό ως Βασικό Πολύγλωσσο Σύνολο, το οποίο είναι αρκετά μεγάλο για τους πιο συνηθισμένους χαρακτήρες των περισσότερων γλωσσών.
Ωστόσο, κάποια σύμβολα δεν χωρούν σε μία μόνο μονάδα κώδικα. Η λύση είναι να τα αναπαραστήσουμε με δύο μονάδες κώδικα. Αυτές οι δύο μονάδες κώδικα UTF-16, που συχνά αναφέρονται και ως ζεύγος υποκατάστασης, σχηματίζουν ένα σημείο κώδικα.
Συνοψίζοντας, λοιπόν, όταν αναφερόμαστε στην κωδικοποίηση UTF-16:
code unit είναι 16 (ή λιγότερα) bit που αναπαριστούν έναν μόνο χαρακτήρα.code point είναι μία ή δύο μονάδες κώδικα που αναπαριστούν έναν μόνο χαρακτήρα.Για να αυξηθεί κι άλλο η σύγχυση, υπάρχουν και τα συμπλέγματα γραφημάτων, που είναι βασικά ακολουθίες χαρακτήρων Unicode (σημείων κώδικα) που πρέπει να αντιμετωπίζονται ως μία οπτική μονάδα. Για παράδειγμα, κάποια emoji, όπως αυτό εδώ 👨👦.
Οι περισσότερες ενσωματωμένες μέθοδοι της Javascript λειτουργούν με συμβολοσειρές κωδικοποιημένες σε UTF-16, ωστόσο βασίζονται σε μονάδες κώδικα UTF-16.
Για παράδειγμα, μια μέθοδος String.prototype.split("") θα χωρίσει μια συμβολοσειρά ανά μονάδες κώδικα.
Από την άλλη, οι String iterators διατρέχουν ανά σημεία κώδικα.
Μπορείς να διαβάσεις πολλά περισσότερα, και να βρεις παραδείγματα για συμβολοσειρές Unicode, στο MDN.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις JavaScript με 37 έννοιες159 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.