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 :

char vs wchar_t


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut char vs wchar_t


    Je me posais une question soudainement... Peut-on utiliser le type wchar_t en lieu et place des char traditionnels sans soucis de compatibilité ? Je parle bien sûr de pouvoir lire tous type d'encodage même le plus basique comme l'ASCII !

    pour vos éclaircissement
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #2
    Membre expérimenté Avatar de moins1
    Homme Profil pro
    Autre
    Inscrit en
    Février 2013
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autre
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 85
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Peut-on utiliser le type wchar_t en lieu et place des char traditionnels sans soucis de compatibilité ?
    Ce serait tellement l'fun! Malheureusement, je pense pas. Y'a des petits malins qui ont décidé de faire ça compliqué: UTF-8, UTF-16 avec ou sans BOM etc etc. Et d'autre avec ANSI.

    En tout cas si quelqu'un a la recette miracle, je suis preneur.


  3. #3
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Ce n'est pas si simple. La gestion de l'encodage est généralement un bon gros bazars pour les maintainers de libs, et parfois aussi pour les utilisateurs.

    Déjà, pour wchar_t, c'est mal partie :
    "The width of wchar_t is compiler-specific and can be as small as 8 bits. Consequently, programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text. The wchar_t type is intended for storing compiler-defined wide characters, which may be Unicode characters in some compilers."
    Ref : http://en.wikipedia.org/wiki/Wide_character

    Après, tu a 'char16_t and char32_t' comme indiqué sur wikipedia, mais ça ne te fera pas le café. C'est à toi de décode l'encodage de ton entrée, de convertir vers le bon format (les cas classiques sontLatin1-> Utf-16 etUtf-8->Utf16, et tu stoke tes données en mémoire comme de l'utf-16), encoder ta sortie dans le bon format, savoir comment détecter le format de ton entrée (bienvenu en enfer ), etc.
    Attention aussi au fait qu'il y à UTF-16 Big Endian et UTF-16 Low Endian (http://fr.wikipedia.org/wiki/UTF-16).

    Bref, c'est le gros mikmak, et ça n'a rien de joli joli.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Mouais effectivement, en fait c'était pour améliorer ma bibliothèque de chaînes de caractères et j'aurais voulu proposer la gestion des chaînes avec les wchar_t mais je caressais l'espoir qu'on puisse utiliser ce type aussi pour l'unicode etc.

    Proposer l'un et l'autre séparément ça va être trop de travail pour peut-être pas grand chose car j'ai plus de 60 fonctions sans compter le fait que la libs est basée sur un objet (structure)... encore que là je pourrais m'en sortir avec un enum et permettre de créer un objet soit en char ou en wchar_t... à méditer
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre éclairé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Par défaut
    Si tu veux rajouter le support d'UTF-8, je te conseil de rajouter un champ encodage dans ta structure, de la forme enum {ISO_8859_1, UTF-16}, et de fournir des fonctions de convertions. Certaines fonctions ne demanderont aucun changement (nombre de mots par exemple), d'autres en demanderont (nombre de caractères). Voire, ne pas mettre d'enum et modifier tes fonctions pour ne travailler qu'avec de l'UTF-16.

    Je te déconseille de faire quelque chose de la forme enum {ISO_8859_1, UTF_8, UTF_16LE, UTF_16BE, etc...}, car ca là, même la fonction qui compte le nombre de lettre deviendrais horible. Le plus simple est vraiment de fournir des fonctions de conversions (from_utf_16le, from_utf_8, from_latin1, et to_utf_16le, to_utf_8le, etc...) et de ne travailler en interne qu'avec deux (voire un seul) format. C'est ce que font bon nombre de libs.

    C'est un gros boulot, mais le jeux en vaut la chandelle. Ne serait-ce que pour pouvoir travailler avec des langues comme le japonnais.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

Discussions similaires

  1. char, string, wchar_t, wstring ?
    Par Invité dans le forum SL & STL
    Réponses: 8
    Dernier message: 22/10/2014, 22h32
  2. std::allocator pour char et wchar_t
    Par Meseira dans le forum SL & STL
    Réponses: 6
    Dernier message: 24/04/2013, 14h20
  3. conversion - char to wchar_t
    Par olobraecky dans le forum Débuter
    Réponses: 7
    Dernier message: 03/10/2008, 11h46
  4. Réponses: 21
    Dernier message: 20/02/2006, 11h00
  5. Conversion char * vers wchar_t
    Par Zapan dans le forum C++
    Réponses: 4
    Dernier message: 24/02/2005, 15h56

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