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 :

Afficher en respectant l'encodage local


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Par défaut Afficher en respectant l'encodage local
    Bonjour,

    je dois réaliser une application qui fonctionne sur plusieurs machines linux avec des encodages différents par défaut (dans la console notament), (principalement latin-1 et UTF-8). Mon problème est que pour afficher des accents, la console doit être dans le même encodage que le fichier source (.c) sinon ça ne marche pas, j'ai soit un ? soit des caractères byzarres. J'ai beau essayer de spécifier l'encodage locale avec setlocale(), ça ne marche pas, je dois mal m'y prendre.

    Est ce que quelqu'un peut m'éclairer sur ce problème ?

    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    setenv et getenv ?? (en précisant le LOCALE comme paramètre)

  3. #3
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Généralement, un petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale (LC_ALL, "");
    en début de code suffit.

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Par défaut
    Bonjour,

    j'ai bien essayé le setlocale(LC_ALL, ""), mais déjà je ne sais pas exactement où le mettre : dans le main ? dans la fonction d'affichage juste avant printf (qui se trouve dans un autre fichier source) ?

    Sinon pour le setenv, je comprends à quoi ça sert mais je ne vois pas l'utilité ici, une petite explication ?

    Je vais refaire des tests dans la matinée et je vous post le code qui ne marche pas.

    A tout à l'heure

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Le Mérovingien Voir le message
    Bonjour,

    j'ai bien essayé le setlocale(LC_ALL, ""), mais déjà je ne sais pas exactement où le mettre : dans le main ? dans la fonction d'affichage juste avant printf (qui se trouve dans un autre fichier source) ?
    Généralement, on le place comme première instruction dans le main().

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Par défaut
    Alors voilà un code qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    #include <locale.h>
     
    int main(void)
    {
      char *locale = setlocale(LC_ALL, "");
     
      printf("locale actuelle : %s\n\n",locale);
     
      printf("Voici des éléments à afficher après sélection de l'encodage.\n");
     
      return 0;
    }
    Ce fichier est enregistré en encodage latin-1 (avec emacs), compilé et exécuté dans une console encodé en UTF-8 (je suis sous ubuntu avec l'encodage par défaut), et j'obtiens des ? dans un carré noir (comme quand on force l'encodage de cette page en UTF-8).

    Je viens de lire le message de Thierry Chappuis et c'est ça qu'il me faut, je regarde et je vous dis quoi

  7. #7
    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 Envoyé par nicolas.sitbon Voir le message
    Généralement, un petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale (LC_ALL, "");
    en début de code suffit.
    Ca va changer la locale mais pas l'encodage. Si par exemple mon source est encodé en ISO-8859-1 et que je cherche à afficher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
     
    int main(void)
    {
        setlocale(LC_ALL, "");
     
        printf("ééé");
        return 0;
    }
    dans une console dont l'encodage est en UTF-8. Je vais avoir des surprises. Voir convertir d'un encodage à un autre, Pour du côté de libiconv ou de la Glib.

    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++

    +

Discussions similaires

  1. [MySQL] Comment afficher les erreurs MySQL en local ?
    Par Alcius dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 19/11/2010, 20h10
  2. Mon code php s'affiche lorsque je teste en local
    Par francis189 dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2010, 16h44
  3. Vérifier qu'une String respecte un encodage
    Par yusherboy dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 10/10/2008, 00h56
  4. Afficher des heures locales
    Par mrpowerboy dans le forum Applets
    Réponses: 3
    Dernier message: 27/09/2005, 17h57
  5. [ENCODAGE][JAVA]Afficher correctement des accents
    Par kornelius dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/02/2004, 16h37

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