IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

[C++0x] UTF-8 std::string::length()


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut [C++0x] UTF-8 std::string::length()
    Bonjour,

    j'étais en train de lire : http://stackoverflow.com/questions/1...idered-harmful

    Et je me disais que le fait d'avoir une spécification pour les formats de caractères dans la nouvelle norme (UTF-8, UTF-16, UTF-32) allait pas mal aider si on utilise bien que l'UTF-8.

    Simplement je me demandais si std::string allait prendre en compte le format lorsqu'on utilise de l'UTF-8 pour nous retourner le nombre de charactères avec std::string::length() plutot que le nombre de bytes?

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Non (etant donne le modele acturel, il faudrait mettre une locale dans chaque string pour le faire ou parametriser size() par la locale -- et en prime comme le nombre de byte est interessant, il faudrait une autre fonction pour avoir le nombre de byte).

    Il doit y avoir moyen d'ecrire une fonction libre faisant ce que tu veux (et prenant un parametre de type locale). Je sais l'interface des locale est a moitie incomprehensible et quasiment inutilisable (c'est pour ca que je ne donne pas un exemple). Pour la locale courante C, le plus simple est d'utiliser mbsrtowcs pour avoir la longueur.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Pour l'instant sous Linux, tout est en UTF-8.

    Si tu mets "ä é o" dans une std::string, il te renvoit une taille de 7. Mais ce n'est pas très génant si tu le sais.

  4. #4
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Justement je me disais qu'ils auraient ajouté une fonction ou n'importe quoi pour automatiquement se baser sur une locale pour avoir le nombre de charactères...

    Bon, dommage alors. Toutes les solutions pour gérer "facilement" l'utf8 semblent non-standards.

  5. #5
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Je relisais:

    Non (etant donne le modele acturel, il faudrait mettre une locale dans chaque string pour le faire ou parametriser size() par la locale -- et en prime comme le nombre de byte est interessant, il faudrait une autre fonction pour avoir le nombre de byte).
    Justement dans std::string il y a size() et length(), or length() est exactement (d'après le standard si je me souviens bien) size(); Aussi on pourrait avoir length() (avec un paramettre optionel de locale) pour avoir le nombre de charactères!
    Ok ça changerai le comportement et donc ne serait pas forcément rétro-compatible mais avoir les deux mots pour la même chose est pour le moins trompeur.

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Klaim Voir le message
    Justement dans std::string il y a size() et length(), or length() est exactement (d'après le standard si je me souviens bien) size(); Aussi on pourrait avoir length() (avec un paramettre optionel de locale) pour avoir le nombre de charactères!
    Ok ça changerai le comportement et donc ne serait pas forcément rétro-compatible mais avoir les deux mots pour la même chose est pour le moins trompeur.
    Historique. length() est le long datant de quand string existait dans la SL mais que la STL n'avait pas ete encore mise dedans. size() (et vraisemblablement d'autres membres) ont ete ajoutes pour rendre cette classe qui n'avait pas d'equivalent dans la STL compatible avec. Et par apres, la STL s'est mise a la fournir aussi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [débutant] equivalent à sprintf pour les std::string
    Par Biosox dans le forum SL & STL
    Réponses: 22
    Dernier message: 26/08/2005, 12h46
  2. cannot convert 'std::string' to 'System::String ^'
    Par broadhead dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2005, 11h37
  3. [JTABLE] taille dynamique = F°(String.length)
    Par tripop dans le forum Composants
    Réponses: 15
    Dernier message: 13/01/2005, 17h07
  4. std::string, operator =
    Par tut dans le forum SL & STL
    Réponses: 10
    Dernier message: 05/11/2004, 12h07
  5. sql string length
    Par pedro226 dans le forum Bases de données
    Réponses: 9
    Dernier message: 05/05/2004, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo