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

C++ Discussion :

Unicode est-il vraiment un probleme ?


Sujet :

C++

  1. #21
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    n'y a-t-il que moi pour penser que d'avoir les char ou les wide chars ne suffit pas ?

    J'aime vraiment l'idée d'avoir une classe qui gere de l'unicode en interne, mais permet de convertir en 8 bits ou UTF-8 etc....

    on ne serait pas obligé de savoir a l'avance ou de se dire que ca peut-etre pas marcher dans ce cas etc...

    a+

  2. #22
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    n'y a-t-il que moi pour penser que d'avoir les char ou les wide chars ne suffit pas ?
    Non, il y a probablement d'autres personnes qui ne connaissent pas vraiment grand chose à unicode qui pensent de même.
    Boost ftw

  3. #23
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par loufoque
    Non, il y a probablement d'autres personnes qui ne connaissent pas vraiment grand chose à unicode qui pensent de même.
    MOUAA AH AH
    merci....

  4. #24
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    alors que me conseilles-tu Mr. Loufoque ?

    tout faire avec des std:string ?
    tout faire avec des std:wstring ?
    ne pas m'occuper d'unicode ?

    explique moi ta "strategie" s'il te plait...

  5. #25
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sous Visual, je conseillerais tout en wstring ou tout en std::basic_string< TCHAR >, c'est selon.

    Sous MinGW, ça peut être plus dur, puisque les wcin/wcout ne sont pas supportés.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #26
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par Médinoc
    Sous Visual, je conseillerais tout en wstring ou tout en std::basic_string< TCHAR >, c'est selon.

    Sous MinGW, ça peut être plus dur, puisque les wcin/wcout ne sont pas supportés.
    en fait j'aimerais le faire d'une maniere multiplateforme ....
    comme dit, avec Qt c'est transparent, mais je cherche un moyen avec boost, vu que tout le monde sur ce forum au moins, me conseille boost pour la partie metier ...

    peut-etre que Loufoque aurait une idée, puisqu'il comprend bien le probleme d'unicode ?!

  7. #27
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par epsilon68
    n'y a-t-il que moi pour penser que d'avoir les char ou les wide chars ne suffit pas ?
    Ça dépend pour quoi faire. Personnellement, j'aimerais bien en standard quelque chose qui offre au moins les informations de classifications et de normalisation des formes, et pour ça il faut un peu plus même si on peut imaginer une interface basée sur les locales et char/wchar_t.

    Pour certains usages, il est vraissemblable que la situation actuelle suffise, pour autant qu'il y ait la locale nécessaire. Mais même alors, un problème est que le nom des locales n'est pas normalisé. Et pour pas mal d'usage, il faudrait au moins des facettes de conversion supplémentaires.

    En pratique, les locales sont quelque choses de complexe, et on peut désirer un support plus simple. D'ailleurs certains sont suffisemment convaincus pour préparer des propositions: N2018 N2035 même si ces propositions ne vont pas aussi loin que je le voudrais. Et ce sont des propositions relativement avancées dans le processus (voir N2011)
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #28
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Il y a plusieurs moyens de gérer l'unicode, et le choix que l'on retient dépend en fait surtout de l'interfaçage dont on a besoin avec d'autres bibliothèques ou le système.
    Quoi qu'il en soit je suis plutôt pour une solution indépendante du système et des locales en dehors des interfaçages. Donc bien entendu, rien de basé sur les caractères larges.
    Pour des raisons d'interfaçage avec des bibliothèques utilisant beaucoup std::string on peut mettre de l'utf-8 dans des std::string tout en faisant attention à ce que l'on fait, en particulier on peut utiliser un itérateur externe spécial. (disponible dans boost, qui propose aussi un convertisseur utf-8 <-> ucs-4)

    Sinon un type dédié c'est mieux.
    De toutes façons dans l'idéal il pourrait être bon de revoir std::string, on pourrait en profiter pour refaire quelque chose supportant bien l'unicode.
    Boost ftw

  9. #29
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par loufoque
    Quoi qu'il en soit je suis plutôt pour une solution indépendante du système et des locales en dehors des interfaçages. Donc bien entendu, rien de basé sur les caractères larges.
    J'ai du mal à suivre ton "donc". Pourrais-tu développer ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  10. #30
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    La taille des caractères larges et le charset utilisé dépendent du système et, éventuellement, des locales.
    C'est donc on ne peut plus clair.
    Boost ftw

  11. #31
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    La taille des caractères non large dépend aussi du système. Le charset aussi.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  12. #32
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    et libiconv ?

    mais je ne sais quoi prendre comme representation interne et comment utiliser iconv dans le cas d'un fichier par exemple ?

  13. #33
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    et libiconv ?
    l'avez-vous deja utilisé ?
    Grace a cet lib on pourrait toujours fonctionner en unicode en interne, et sortir dans un encoding quelquonque non ?

  14. #34
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut libiconv unicode
    heu ... ?
    vous n'utilisez pas libiconv ?
    pourtant il fait les conversions, beaucoup de conversion.

    moi je n'ai pas d'experience dedans, mais j'aimerais bien quelques pistes, strategies a employer si on veut travailler avec avec unicode.

    merci a+

  15. #35
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    J'ai utilisé iconv pour tester.
    J'ai lu un fichier XML codé en UTF-8 et un autre codé en Unicode UTF-16

    J'ai du tester errno pour savoir si la conversion avait echouée a cause d'un caractere incorrect ou alors une sequence incomplete. sinon a part aussi une logique pas si evidente que ca, ca marche plutot bien.
    bon le code resultant necessiterait vraiment de l'encapsulation ....

    j'ai aussi testé cela avec Qt, wahoo vraiment simple.
    dans le genre QTextStream in( ... ); in.setEncoding("UTF-8")
    apres c'est tout bon

    Le truc c'est que plus je m'ecarte de Qt, plus j'aurais envie de refaire ce genre de classe.... un "char" unicode, un stream qui gere les encoding etc...

    Je me demandais aussi si le fait de tester "errno" dans le cadre multi-thread ne posait pas de probleme ? errno est-il une variable global ou uniquement au thread ?

    et vous qu'en pensez vous ?
    le probleme avec tout cela c'est que penser aussi aux expressions regulieres ainsi qu'a tous les traitements de chaines en unicode... ca peut tres vite devenir tres complexe !!!!

    ... je ne sais plus quoi penser des std::string, de boost et de Qt
    avec cette histoire d'unicode ....

  16. #36
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    En fait je travaille sur un nouveau type de string qui, entre autres, fonctionnerait en Unicode et que j'aimerais bien soumettre à boost.
    Malheureusement j'ai encore du mal à voir comment tout cela peut s'interfacer sans trop de problèmes avec l'existant. Pour l'instant, je serais pour traiter std::string comme étant dans le charset local et donc faire des conversions de charset pour la construction depuis std::string ou la conversion vers std::string, ce qui me semble être une opération coûteuse.
    Sinon y'a la solution Glib::ustring
    Boost ftw

  17. #37
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Une petite question:
    pour ce qui est des string et char*, l'encodage est dépendant de la plateforme ca tout le monde le sait. Mais dans le cas des wstring, ce n'est pas sensé être du pur utf-16, donc strictement similaire sur toutes les plateformes? (je parle uniquement du stockage en mémoire, pas des flux)

  18. #38
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par zais_ethael
    Une petite question:
    pour ce qui est des string et char*, l'encodage est dépendant de la plateforme ca tout le monde le sait. Mais dans le cas des wstring, ce n'est pas sensé être du pur utf-16, donc strictement similaire sur toutes les plateformes? (je parle uniquement du stockage en mémoire, pas des flux)
    Ça peut être des codages larges autres (du genre de ceux utilisés par les Japonais, les Chinois, les Koréens depuis avant Unicode -- JIS, Big5, ...)
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  19. #39
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Mais dans le cas des wstring, ce n'est pas sensé être du pur utf-16, donc strictement similaire sur toutes les plateformes?
    Non.
    Non seulement ça a déjà été dit dans ce sujet, mais en plus tu as des preuves vivantes que c'est faux. La taille de wchar_t varie d'un système à l'autre (2 octets sous MS Windows, 4 sous GNU/Linux). Ensuite wstring est normalement censé contenir des charsets de taille fixe, ce que n'est pas UTF-16.
    Et pour finir, aucune partie de C++ n'a la moindre notion de ce qu'est Unicode. Quelques vagues notions seront probablement ajoutées dans C++0x, et mieux si on de la chance.
    Boost ftw

  20. #40
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par loufoque
    Et pour finir, aucune partie de C++ n'a la moindre notion de ce qu'est Unicode.
    D'Unicode, faut pas rêver. Mais de ISO-10646, il y a quelque chose. uXXXX et UXXXXXXXX. Et il semble évident que dans une locale ISO-10646, wchar_t doit faire au moins 21 bits. Le problème, c'est que la gestion des jeux de caractères est trop couplée au reste des locales (ou que tout est trop couplé dans les locales).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/12/2006, 08h39
  2. Réponses: 7
    Dernier message: 06/11/2006, 20h43
  3. Est-ce vraiment légal ?
    Par pi-2r dans le forum Sécurité
    Réponses: 21
    Dernier message: 13/08/2006, 12h17
  4. [Reference][String][Integer] Qu'est ce vraiment ?
    Par ZeKiD dans le forum Langage
    Réponses: 17
    Dernier message: 24/01/2006, 17h22

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