L'obtention de la longueur réelle d'une codé en UTF-8 std::string?

mon std::string est codé en utf-8 alors, évidemment, str.length() renvoie le résultat erroné.

J'ai trouvé cette information, mais je ne suis pas sûr de savoir comment je peux l'utiliser pour ce faire:

L'octet suivant les séquences sont
utilisé pour représenter un caractère. L'
séquence
utilisé dépend de l'UCS, le numéro de code de caractère:

   0x00000000 - 0x0000007F:
       0xxxxxxx

   0x00000080 - 0x000007FF:
       110xxxxx 10xxxxxx

   0x00000800 - 0x0000FFFF:
       1110xxxx 10xxxxxx 10xxxxxx

   0x00010000 - 0x001FFFFF:
       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Comment puis-je trouver la longueur réelle d'une codé en UTF-8 std::string? Grâce

  • C++ ne sait rien à propos de codage, de sorte que vous ne pouvez pas vous attendre à utiliser une fonction standard pour ce faire. Certains Systèmes d'Exploitation (par exemple, Windows) peut offrir des fonctions pour aider à cela, si vous ne voulez pas écrire un à partir de zéro.
  • Je comprends que c'est pourquoi j'ai marqué ce également algorithme, je ne veux en écrire un à partir de zéro
  • Veuillez noter que, bien que Michael réclamation est vrai quand il l'a écrit, depuis C++11 de la Bibliothèque Standard ne sais à propos de codages. Voir stackoverflow.com/questions/16863937/...
  • Qu'entendez-vous par "durée réelle"? Nombre de points de code? Dans la NFC, NFD, NFKC, ou NFKD? Nombre de composite personnages? Nombre de graphèmes? Nombre de graphème clusters? Nombre de pixels sur l'écran dans une police donnée?
  • En effet, la plupart des réponses ici supposent que la "longueur" signifie "nombre de points de code".
  • Intéressant à lire: utf8everywhere.org/#myth.strlen

InformationsquelleAutor jmasterx | 2010-10-31