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 :

g++ et l'encodage du texte.


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 35
    Points : 31
    Points
    31
    Par défaut g++ et l'encodage du texte.
    Bonjour à tous.
    Je suis en train de codouiller quelques classes de cryptographie. Vu que j'ai tendance Je me posais une question à propos de l'encodage utilisé par g++ sous linux. Quel encodage est utilisé? En général, je me base sur les tables ASCII, mais vu qu'il m'affiche aussi des accents, je ne suis plus trop sûr.

    Est-il possible et propre d'ajouter des entier à des caractères pour les modifier? En général, j'écris quelque chose du genre :
    Ou encore :
    En fait, je fais un peu les choses au petit bonheur la chance, comme on dit, mais sans trop savoir si la méthode est correcte. Pouvez-vous m'en dire un peu plus ou me rediriger vers des sources traitant du sujet?

    Merci à vous.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Les codes que vous avez écrit sont juste. Pour l'ordinateur, un caractère est un nombre .
    Donc, si on fait des additions de caractères, cela fonctionne, car ce sont des nombres (juste que la représentation finale de ceux ci seront des caractères , mais ça c'est pour l'humain)
    Après, le problème de vos additions, c'est qu'elles sont dépendantes de la table de caractères sous jacente (ASCII bien souvent).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par NLS le pingouin Voir le message
    Bonjour à tous.
    Je suis en train de codouiller quelques classes de cryptographie. Vu que j'ai tendance Je me posais une question à propos de l'encodage utilisé par g++ sous linux. Quel encodage est utilisé? En général, je me base sur les tables ASCII, mais vu qu'il m'affiche aussi des accents, je ne suis plus trop sûr.
    Il est difficile de répondre à cette question de manière simple.

    A l'origine, il y a le standard C++. Ce standard définit le jeu de caractère minimum pour compiler un programme. Ce jeu de caractère doit contenir l'ensemble des caractères utilisables pour écrire du code. Incidemment, la taille d'un byte (sizeof(char) = 1 byte) est définie comme étant suffisante pour contenir l'intégralité de ce jeu de caractères.

    Le standard ne dit pas que ce jeu de caractère est l'ensemble ASCII. Il laisse ce choix à l'appréciation de l'implémentation. Rien n'empêche donc un compilateur d'utiliser un autre encodage - UTF8 ou UTF16, pour ne citer qu'eux, sont tout à fait valides aussi.

    Le travail du compilateur, c'est (entre autres) de vérifier que le fichier d'entrée est valide selon un certain nombre de règles, y compris celle que je viens de citer. Si le fichier est encodé dans un jeu de caractères ne contenant pas l'intégralité des symboles nécessaires à la construction d'un programme, alors la compilation ne peut pas se faire correctement. Mais si cette condition est vérifiée, ce n'est pas le rôle du compilateur de limiter le jeu de caractère utilisé. Dans les fait, cette limitation existe toujours : un des points important du compilateur est l'analyse lexicale, durant laquelle il effectue des comparaisons de caractères. Ces comparaison peuvent varier selon l'encodage utilisé, et comme il est impossible d'implémenter toutes les comparaison (y compris toutes les comparaison pour des jeu de caractères qui n'existent pas encore), il est par conséquent nécessaire de se restreindre à un ensemble de jeux de caractères connus et maîtrisés.

    Dans les faits, les compilateurs que je connais sont capable d'utiliser tout jeu de caractère basé sur ASCII. L'intégralité des symboles utilisés pour programmer en C++ sont contenu dans le jeu ASCII (0-127; ASCII est un jeu de caractères sur 7 bits), et tous les autres caractères sont en bonus. Etant donné que les autres caractères ne peuvent être utilisés pour définir une partie de la structure du programme, le compilateur n'a pas à se poser de question sur leur signification, et n'a donc pas d'intérêt particulier à interpréter leur valeur. Ce qui permet d'utiliser des caractère accentués (ou du japonnais) dans les commentaire, les chaines de caractère, etc.

    Pour répondre à ta question : le compilateur utilise n'importe quel jeu de caractère, à partir du moment ou ce jeu de caractère contient le jeu ASCII.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Essaie ce petit programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <iostream>
     
     
    int main()
    {
        const char s[] = "é";
        for (const char* p = s; *p; ++p)
            std::cout << static_cast<const int>( *p ) << std::endl;
        return 0;
    }
    Selon l'encodage choisi pour le fichier, il n'affichera pas la même chose.

    Tu peux essayer avec d'autres caractères, tu devrais toujours avoir des résultats différents.
    Mais tu remarqueras que toutes les valeurs affichées sont comprises dans l'intervalle [-128, 128[ (ou [0, 256[ si tu passes par un unsigned char).
    Ceci dit, à condition que l'encodage d'entrée contienne l'ASCII, le programme affichera la même chose pour les caractères ASCII ([0, 128[).

    On peut également noter la présence des « caractères larges » (« wide characters »), qui sont tous stockés sur plusieurs octets : « wchar_t ».
    Je ne les ai jamais utilisés, donc je ne peux pas en dire grand chose…

Discussions similaires

  1. [VB 2005]encodage fichier texte
    Par Mandarine dans le forum VB.NET
    Réponses: 1
    Dernier message: 03/11/2007, 14h43
  2. Problème d'encodage de texte
    Par Grantoumaigr dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/09/2007, 15h13
  3. Fonction alert() : encodage du texte
    Par Janitrix dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/05/2007, 22h47
  4. [encodage fichier texte]
    Par nyko_kliko dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 28/07/2006, 16h21
  5. [FLASH MX2004] Encodage de texte
    Par t_o_7_ dans le forum Flash
    Réponses: 1
    Dernier message: 25/07/2005, 00h51

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