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 :

Galère en mode console (Linux ou Windows) et les caractères accentués


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 329
    Par défaut Galère en mode console (Linux ou Windows) et les caractères accentués
    Bonjour,

    Je suis en train de me prendre la tête avec la fonction wprintf() qui est censée apporter une amélioration concernant le traitement des caractères accentués dans les chaines de caractères en C. Le constat est le suivant: quand nous essayons d'aligner des champs (type formulaire) avec mes élèves, si nous avions le malheur d'avoir un caractère accentué dans la chaine de caractères à afficher, nous avons un ou plusieurs décalages vers la gauche résultant du fait que printf() fait la conversion unicode (2 bytes si je ne me trompe pas) --> ascii (1 byte) et ne restitue pas le byte perdu dans la chaine.
    Ainsi une chaine de 30 caractères devient une chaine de 29 caractères après être passée dans le printf(). Ce qui explique le décalage dans les champs de formulaires alignés...

    Je ne sais pas vous faire un topo dans cette misère de contrôle où il est impossible d'aligner les champs (la faute à php ????)

    Mais en gros:

    Nom: [ chaine de 30 caractères alignée sur la droite]
    Adresse [ chaine de 30 caractères qui contient des accents]

    Le champs Nom et Adresse ne sont plus alignés (et pour cause la chaine contenant l'adresse ne fait plus 30 caractères mais une taille inférieure correspondant à 30-nombre de caractères accentués.).

    Nous essayons de nous "dépatouiller" avec [B]wprintf[()/B] mais c'est encore pire, là lorsque nous essayons d'afficher la chaine, la fonction wprintf() n'affiche que la première lettre ou remplace les accents par '?'... pénible...

    Devrais-je abondonner C et passer à Java en mode console ?
    Ou obliger mes élèves (moi ça va je maitrise) à écrire tous leurs programmes en anglais ^^

    Je n'ai pas encore bien cherché sur le net, et dans la littérature, disons que ça me gonfle.

  2. #2
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    bonsoir,

    ça gonfle un prof de chercher un peu sur le net ou dans «la littérature» ???

    Enfin bref, le plus simple (s'il ne s'agit que d'un exercice dont le thème central n'est pas unicode et compagnie) est d'utiliser un encodage monobyte en mode console, style ISO8859-1 par exemple.

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Pour information, dans toutes les entreprises ou j'ai travaille, il est strictement interdit d'utiliser les caracteres accentues dans le code. Pas plus d'ailleurs que de mettre des commentaires en cyrillique ou en grec.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    0/ Les problemes d'encodage sont complexes, tout le monde les fuit autant que possible.
    1/ Il faut travailler avec des wchar_t si on ne veut pas avoir a gerer des encodages multibytes. Mais attention, avec les caracteres combinants (utilises par Unicode pour gerer les accents), une lettre et un accent dessus peuvent etre encode comme deux caracteres.
    2/ Normalement, si on fait un setlocale(LC_ALL, "") en debut de programme et que tout est correctement configure, ca devrait marcher
    3/ Ma comprehension est que s'attendre a ce que quelqu'un configure correctement les choses sous Windows pour qu'une application console fonctionne correctement sans code supplementaire specifique a Windows est illusoire.

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Aussi, printf() n'est pas sensé faire de conversion. Il affiche la chaîne qui lui est passée (après traitement des %), point.

  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 matafan Voir le message
    Aussi, printf() n'est pas sensé faire de conversion. Il affiche la chaîne qui lui est passée (après traitement des %), point.
    Il peut faire une conversion (la plus courante etant l'insertion de CR avant chaque LF pour les fichiers textes, on peut envisager aussi une conversion UTF-8 vers UTF-16 ou l'ajout d'un BOM).

  7. #7
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 329
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Bonjour,

    Pour information, dans toutes les entreprises ou j'ai travaille, il est strictement interdit d'utiliser les caracteres accentues dans le code. Pas plus d'ailleurs que de mettre des commentaires en cyrillique ou en grec.
    J'ai connu ça aussi, mais mes petits aiment la langue de voltaire et non la langue de shakespeare ^^
    "Dans le code" j'espère bien ne jamais mettre un nom de variable avec des caractères accentués (ou le c cédille)... par contre dans les commentaires... je ne m'en prive pas.
    Je n'ai jamais travaillé avec des russes ni des grecs donc mes commentaires sont soit en anglais soit en français... mais j'aimerais bien voir un code source C avec des caractères cyrilliques ou grecs dedans, surtout à la compilation...
    Est-ce que les commentaires passent ? Normalement oui tout ce qui est entre /* */ ou // est censé être ignoré (au niveau du pré-processing si mes souvenirs sont bons)...

    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    ...s'attendre a ce que quelqu'un configure correctement les choses sous Windows pour qu'une application console fonctionne correctement sans code supplementaire specifique a Windows est illusoire.
    lol ^^ le problème des caractères accentués est résolu par chez toi ^^
    A moins que tu sois sur un clavier qwerty où c'est galère pour obtenir ces foutus caractères accentués...

    Citation Envoyé par matafan Voir le message
    ...Tu as raison...
    Ce n'est pas moi qui est raison, c'est le man de printf... ^^
    (section The conversion specifier)

  8. #8
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Citation Envoyé par hurukan Voir le message
    "Dans le code" j'espère bien ne jamais mettre un nom de variable avec des caractères accentués (ou le c cédille)...
    Le compilo générerait une erreur de toute façon.

    Citation Envoyé par hurukan Voir le message
    par contre dans les commentaires... je ne m'en prive pas.
    Sans vouloir en rajouter une couche, je m'efforçais (je ne m'efforce plus car c'est devenu naturel) de mettre mes noms de variables/fonctions et mes commentaires en anglais pour plusieurs raisons:

    - Il n'y a aucun problème d'accentuation.
    - C'est parlé par la majorité des gens utilisant mes sources.
    - la plupart des mots-clefs utilisés en informatique sont anglais.
    - Même si on ne comprend pas tout, la syntaxe informatique est si simple que google-traduction fait souvent bien sont boulot. Sauf si l'on s'amuse à essayer de faire de belles phrases, ce qui n'est pas le but d'un commentaire.

    A+

    Pfeuh

  9. #9
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 329
    Par défaut
    Citation Envoyé par kwariz Voir le message
    bonsoir,

    ça gonfle un prof de chercher un peu sur le net ou dans «la littérature» ???
    Oui quand on passe déjà 2/3 de son temps à chercher des informations pour les exercices, vérifier que les exercices fonctionnent et introduire tout cela dans un projet à court terme pour que les élèves aient au moins l'impression que ces exercices aient un sens. De plus dans les forums il faut faire un tri, dans la littérature aussi, je donne cours dans le secondaire (collège) et mes étudiants ne sont pas des programmeurs avertis, ils débutent en programmation, 'faut pas que je les terrorise non plus ^^ du coup, oui ça me gonfle de chercher un peu sur le net, et dans la littérature ^^
    Maintenant, merci, j'ai des débuts de réponses... sur ce forum ^^

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

Discussions similaires

  1. [Dev-Pascal] Afficher les caractères accentués dans la console et dans une MessageBox
    Par escargot72 dans le forum Free Pascal
    Réponses: 12
    Dernier message: 28/12/2014, 15h19
  2. Capture Swing par mail en mode console (Linux)
    Par Stef784ever dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 04/06/2012, 17h32
  3. Réponses: 15
    Dernier message: 26/04/2008, 16h07
  4. mode console/mode window !
    Par gdpasmini dans le forum MFC
    Réponses: 2
    Dernier message: 27/03/2006, 16h25
  5. Réponses: 6
    Dernier message: 14/07/2005, 14h25

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