Me pregunto por qué no tenemos algunas clases de cadenas que representan una cadena de grupos de grafemas Unicode en lugar de puntos de código o caracteres. Me parece que en la mayoría de las aplicaciones sería más fácil para los programadores acceder a los componentes de un grafema cuando sea necesario que tener que organizarlos desde puntos de código, lo que parece necesario incluso para evitar romper casualmente una cadena en "medio grafema" (Al menos en teoría). Internamente, una clase de cadena puede usar una codificación de longitud variable como UTF-8, UTF-16, o en este contexto, incluso UTF-32 es de longitud variable; o implementar subclases para todos ellos (y opcionalmente configurar la opción en tiempo de ejecución para que diferentes idiomas puedan usar sus codificaciones óptimas). Pero si los programadores pudieran "ver" las unidades de grafema al inspeccionar una cadena, no
fuente
Respuestas:
Parece que la mejor manera de obtener la corrección es evitar que los programadores hagan "pirateo de cadenas" ... simplemente no está bien escribir su propia envoltura de palabras, guiones, conteo de palabras, justificación, movimiento del cursor, etc. Todos los marcos de interfaz de usuario modernos harán esto por usted en estos días.
Es decir, la abstracción con la que normalmente trabajaría es más un "objeto de visualización de párrafo", como para GTK: http://library.gnome.org/devel/pango/stable/pango-Layout-Objects.html
en lugar de una cadena de grafemas, como: http://library.gnome.org/devel/pango/stable/pango-Glyph-Storage.html
Para llegar a una cadena de glifos, necesita información que solo está disponible en el nivel de "vista", por lo que la mayoría de los usos de cadenas pueden no tener esta información. Por ejemplo, debe conocer la fuente, porque las fuentes pueden tener diferentes ligaduras.
Aparte de ese tipo de materia práctica, los glifos probablemente no sean lo que quieres.
En muchos contextos, desea utilizar los atributos Unicode adecuados, que se muestran en esta API, por ejemplo: http://library.gnome.org/devel/pango/stable/pango-Text-Processing.html#PangoLogAttr
Como puede ver en esa estructura (que refleja los algoritmos Unicode), hacer varias cosas en los límites de glifos no es más correcto que hacerlo en los límites de los caracteres.
Estas dos especificaciones describen los algoritmos para encontrar diferentes tipos de límites:
Hacer el procesamiento de texto implica encontrar esos límites con los algoritmos y luego trabajar con los límites.
Si comienza a investigar qué tan difícil es manejar todos los idiomas correctamente, se dará cuenta rápidamente de que necesita una biblioteca que vea párrafos completos y los maneje correctamente. Windows, Mac, Linux (Qt y GTK) y Java vienen con facilidades para esto, además hay http://site.icu-project.org/ por ejemplo.
Al escribir aplicaciones web, desafortunadamente tienes que dejar que el navegador (probablemente ayudado por el sistema operativo) haga estas cosas, que yo sepa. Todo lo que puede hacer en JavaScript o en el lado del servidor es desordenarlo.
Tal vez resumiría la respuesta como: la mayor parte de la manipulación de cadenas en texto en lenguaje natural está rota, por lo que no tiene mucho sentido preocuparse por la clase de cadenas, aparte de tener una sin métodos ;-)
fuente