Glib::ustring

Puede sorprenderle aprender que gtkmm no utiliza std::string en sus interfaces. En cambio, usa Glib::ustring, que es tan similar y discreto que en realidad puede pretender que cada Glib::ustring es un std::string e ignorar el resto de esta sección. Pero siga leyendo si quiere aplicar otros lenguajes además del inglés en su aplicación.

std::string utiliza 8 bits por carácter, pero 8 bits no son suficientes para codificar lenguajes como árabe, chino y japonés. A pesar de que las codificaciones de estos lenguajes ahora las ha especificado el Consorcio Unicode, los lenguajes C y C++ todavía no proporcionan ningún soporte Unicode estándar. GTK+ y GNOME eligen implementar Unicode usando UTF-8, y eso es lo que está envuelto en Glib::ustring. Proporciona casi exactamente la misma interfaz que std::string, además de conversiones automáticas desde y hacia std::string.

Uno de los beneficios de UTF-8 es que no necesita usarlo a menos que quiera, por lo que no necesita reconvertir todo su código de una vez. std::string todavía funcionará para cadenas de 7 bits ASCII. Pero cuando intente localizar su aplicación para lenguajes como chino, por ejemplo, empezará a ver errores extraños y posibles fallos. Entonces, todo lo que necesitará hacer es empezar a utilizar Glib::ustring en su lugar.

tenga en cuenta que UTF-8 no es compatible con codificaciones de 8 bits como ISO-8859-1. Por ejemplo, las diéresis alemanas no están en el rango ASCII y necesitan más de un byte en la codificación UTF-8. Si su código contiene cadenas literales de 8 bits, debe convertirlas a UTF-8 (por ejemplo, el saludo bávaro «Grüß Gott» sería «Gr\xC3\xBC\xC3\x9F Gott»).

Evite la aritmética de punteros al estilo C, y funciones como strlen(). En UTF-8, cada carácter podría necesitar entre 1 y 6 bytes, por lo que no es posible asumir que el próximo byte es otro carácter. Glib::ustring se ocupa de estos detalles, por lo que puede usar métodos como Glib::ustring::substr() y seguir pensando en términos de caracteres en vez de bytes.

A diferencia de la solución Unicode de Windows UCS-2, esto no requiere ninguna opción especial de compilación para procesar cadenas literales, y no resulta en que los ejecutables y bibliotecas Unicode sean incompatibles con las ASCII.

Referencia

Para obtener más información acerca de cómo proporcionar cadenas literales UTF-8, consulte la sección Internacionalización.