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 :

comment fonctionne le code unicode en langage C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut comment fonctionne le code unicode en langage C
    Bonsoir tout le monde

    J'ai un probleme avec le code unicode en c

    Je sais que 009 = é

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    printf("Précedant");
    J'ai le même problème avec la librairie gtk.

    en signalent que l'afficha est différent.

    Cordialement

    A bientôt

  2. #2
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Salut,

    Le caractère 'é' a le code 0x00e9 en hexadécimal. Je n'ai par contre jamais essayé d'utiliser unicode en C.

    Je crois que tu peux utiliser le type wchar_t (#include <wchar.h>) et les fonctions correspondantes telles que wprintf(wchar_t *,...), wscanf(wchar_t *,...) ou encore iswdigit(wchar_t), mais la définition de wchar_t est, je crois, dépendante du compilateur et donc peu portable (l'avis des spécialistes serait le bienvenu).

    Je ne peux en dire plus sur le sujet. Salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salux,

    C'est difficile la première fois, c'est comme les pointeurs, puis un jour on y reflechit de plus pres et tout s'eclaire au niveau de l'encodage (mais c'est pas une question de C). On élude trop ces histoires d'encodage, et on a tort parce que c'est assez compliqué.

    009 = é
    nié? 9 c'est la tabulation

    Le caractère 'é' a le code 0x00e9 en hexadécimal
    Non, ça c'est dans l'encodage Latin1/Latin9 (et accessoirement windows-1252)

    Qu'est ce qu'il se passe exactement avec «printf("Précedant");» ?
    Dans quel terminal est ce executé?
    Si c'est sous unixoïde, quelle est la "consolefont" du terminal?
    Si c'est sous dos (ou ligne de commande dos sous winwin), quel est le "codepage" ?

    Avec ces considérations vient une autre : d'ou vient le texte constituant les sources du programme? L'encodage de ces sources détermine l'encodage de la chaine litterale "Précédent".
    Les bons éditeurs de sources permettent de choisir l'encodage dans lequel enregistrer les sources.
    Si c'est notepad sous winwin, l'encodage est windows 1252.
    Si c'est un éditeur sous linux, verifie qu'il enregistre pas en UTF-8 (on s'est tous fait avoir au moins une fois) et choisis Latin1 (aka iso-8859-1) (ou Latin9 aka iso-8859-15) à la palce
    Tu peux aussi rester en UTF-8 mais aies conscience que cette fois, tes chaines litterales seront "multi byte", et par exemple strlen() renverrait une valeur erronnée.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Si c'est le cas en Latin-1, c'est aussi le cas en Unicode, donc on peut dire que le 'é' possède le code 0x00E9.
    Sous unixoïde, les consoles ont généralement le même charset que le reste de l'interface graphique, souvent ISO 8859-1 (Latin-1), ISO 8859-15 (Latin-9) ou UTF-8.
    Sous Windows, pour des raisons historiques, les consoles ont un charset dit "OEM", généralement CP437 (US) ou CP850 (Occidental), alors que le reste de l'interface est généralement en CP1252 (Occidental).

    Un moyen d'afficher correctement les accents sur une console Windows est de traduire avant affichage avec la fonction CharToOemA().
    Sinon, quand on écrit directement en unicode, on peut utiliser WriteConsoleW() qui écrit les accents correctement, mais qui ne marche que pour les consoles (si on redigire la sortie vers un fichier, WriteConsoleW() ne marchera pas).
    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.

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation:
    Le caractère 'é' a le code 0x00e9 en hexadécimal
    Non, ça c'est dans l'encodage Latin1/Latin9 (et accessoirement windows-1252)
    Les caractères U+0000 à U+00FF de la norme Unicode sont les mêmes que ceux du jeu de caractère Latin-1.
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Médinoc a été encore plus precis, bien joué

    Les caractères U+0000 à U+00FF de la norme Unicode sont les mêmes que ceux du jeu de caractère Latin-1.
    Ouay c'est vrai, mais tu avais pas précisé que tu parlais du code Unicode
    .. car en général l'unicode est utilisé via l'utf-8 auquel cas 0x00e9 n'est pas 'é'

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    1 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 124
    Par défaut
    Bonjour tout le monde

    Pouriez vous me dire comment faire faire avec la syntaxe svp?

    Merci.

    Cordialement

    A bientôt

Discussions similaires

  1. Réponses: 9
    Dernier message: 07/06/2019, 21h26
  2. Réponses: 17
    Dernier message: 15/06/2015, 15h48
  3. Comment fonctionne ce bout de code ?
    Par masterix59 dans le forum C
    Réponses: 1
    Dernier message: 02/05/2009, 10h32
  4. [Joomla!] Comprendre comment fonctionne le code de joomla
    Par itmak dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 24/02/2009, 18h23
  5. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 13h04

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