Glib::ustring

Μπορεί να εκπλαγείτε μαθαίνοντας ότι η gtkmm δεν χρησιμοποιεί τη std::string στις διεπαφές της. Αντίθετα χρησιμοποιεί τη Glib::ustring, που είναι τόσο παρόμοια και διακριτική που θα μπορούσατε στην πραγματικότητα να προσποιηθείτε ότι κάθε Glib::ustring είναι μία std::string και να αγνοήστε το υπόλοιπο αυτής της ενότητας. Αλλά διαβάστε, αν θέλετε να χρησιμοποιήσετε διαφορετικές γλώσσες από τα αγγλικά στην εφαρμογή σας.

Το std::string χρησιμοποιεί 8 δυαδικά ψηφία ανά χαρακτήρα, αλλά 8 δυαδικά δεν είναι αρκετά για κωδικοποίηση γλωσσών όπως αραβικά, κινέζικα και ιαπωνικά. Αν και οι κωδικοποιήσεις για αυτές τις γλώσσες έχουν τώρα καθοριστεί από την κοινοπραξία Unicode, οι γλώσσες C και C++ δεν παρέχουν ακόμα καμιά προτυποποιημένη υποστήριξη Unicode. GTK+ και GNOME επιλέγουν την υλοποίηση του Unicode χρησιμοποιώντας UTF-8 και αυτό συσκευάζεται από το Glib::ustring. Παρέχει σχεδόν ακριβώς την ίδια διεπαφή ως std::string, μαζί με αυτόματες μετατροπές προς και από std::string.

Ένα από τα πλεονεκτήματα του UTF-8 είναι ότι δεν χρειάζεστε να το χρησιμοποιήσετε εκτός και το θέλετε, έτσι δεν χρειάζεστε να τροποποιήσετε όλο τον κώδικά σας μονομιάς. Η std::string θα δουλέψει ακόμα για συμβολοσειρές ASCII 7 δυαδικών ψηφίων. Αλλά, όταν δοκιμάσετε να τοπικοποιήσετε την εφαρμογή σας για γλώσσες όπως κινέζικα, για παράδειγμα, θα αρχίσετε να βλέπετε περίεργα σφάλματα και πιθανές καταρρεύσεις. Τότε, αυτό που χρειάζεται να κάνετε είναι να αρχίσετε να χρησιμοποιείτε τη Glib::ustring στη θέση του.

Σημειώστε ότι το UTF-8 δεν είναι συμβατό με κωδικοποιήσεις 8 δυαδικών όπως το ISO-8859-1. Για παράδειγμα, τα γερμανικά umlauts δεν είναι στην περιοχή ASCII και χρειάζεται περισσότερο από 1 ψηφιολέξη στην κωδικοποίηση UTF-8. Αν ο κώδικας σας περιέχει κυριολεκτικές συμβολοσειρές 8 δυαδικών, πρέπει να τις μετατρέψετε σε UTF-8 (π.χ. ο βαυαρικός χαιρετισμός "Grüß Gott" πρέπει να είναι "Gr\xC3\xBC\xC3\x9F Gott").

Θα πρέπει να αποφύγετε τον αριθμητικό δείκτη τεχνοτροπίας C και συναρτήσεις όπως strlen(). Σε UTF-8, κάθε χαρακτήρας μπορεί να χρειαστεί οπουδήποτε από 1 έως 6 ψηφιολέξεις, έτσι δεν είναι δυνατό να θεωρήσετε ότι η επόμενη ψηφιολέξη είναι ένας άλλος χαρακτήρας. Η Glib::ustring ασχολείται με τις λεπτομέρειες αυτού για σας, έτσι μπορείτε να χρησιμοποιήσετε μεθόδους όπως Glib::ustring::substr(), ενώ σκεφτόσαστε ακόμα χαρακτήρες αντί για ψηφιολέξεις.

Αντίθετα με τη λύση Unicode UCS-2 των Windows, αυτό δεν απαιτεί καμιά ειδική επιλογή μεταγλωττιστή για επεξεργασία κυριολεκτικών συμβολοσειρών και δεν καταλήγει σε εκτελέσιμα Unicode και βιβλιοθήκες που είναι ασύμβατες με τις αντίστοιχες ASCII.

Reference

Δείτε την ενότητα διεθνοποίηση για πληροφορίες σχετικές με την παροχή κυριολεκτικών συμβολοσειρών UTF-8.