2010-10-20 5 views
1

Je me demande pourquoi nous n'avons pas de classes de chaînes qui représentent une chaîne de grappes de graphes Unicode au lieu de points de code ou de caractères. Il me semble que dans la plupart des applications, il serait plus facile pour les programmeurs d'accéder aux composants d'un graphème que de devoir les organiser à partir de points de code, ce qui semble nécessaire, ne serait-ce que pour éviter de rompre une chaîne dans "mid-grapheme" (au moins en théorie). En interne, une classe de chaînes peut utiliser un codage de longueur variable tel que UTF-8, UTF-16 ou, dans ce contexte, même UTF-32 est de longueur variable; ou implémenter des sous-classes pour chacun d'entre eux (et éventuellement configurer le choix au moment de l'exécution afin que les différents langages puissent utiliser leurs encodages optimaux). Mais si les programmeurs pouvaient "voir" des unités de graphèmes lors de l'inspection d'une chaîne, le code de manipulation de chaîne ne serait-il pas en général plus proche de l'exactitude, et sans beaucoup de complexité supplémentaire?Classe de corde basée sur des graphèmes?

Références:
Characters and Combining Marks
Unicode implementer's guide part 4: grapheme breaking
UnicodeString Class Reference
Enumerating a string by grapheme instead of character
Strings and character encoding in C++

+0

Parce que vous ne l'avez pas écrit? –

+1

Je me demande si c'est le genre de question qui serait mieux placé sur http://programmers.stackexchange.com/ –

+1

@ John, nassar: Je pense que la suggestion de John est un bon pour cette question –

Répondre

0

Je ne le pense pas, parce que les pauses graphèmes ne sont pas la seule mesure de la décision correcte. Et, il existe différents caractères perçus par l'utilisateur en fonction de la langue/du script utilisé. Si vous êtes préoccupé par le mode de normalisation, vous voudrez également voir Normalizer::concatenate. Je recommande donc de ne travailler que dans les unités de code la plupart du temps et de calculer les pauses lorsque cela est nécessaire.

Questions connexes