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 :

Conversion de locale


Sujet :

C

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2007
    Messages : 108
    Par défaut Conversion de locale
    Bonjour

    Pour faire simple, je créer un fichier en faisant un appel système

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system("ma_commande param1 ...");
    Or le param1 est le nom d'un fichier (qui peut éventuellement contenir des accents).

    Dans le détail, voici comment je procède

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <locale.h>
    ...
    int main(void)
    {
    ...
    	char	*file;
    	setlocale(LC_CTYPE, "fr_FR.ISO-8859-1");
    ...
    	sprintf(file,"%ls- %ls.mp3",cd.artist,cd.titleTracks[i]);
            sprintf(cmd,"ma_commande %ls",file);
    }
    Cela fonctionne sauf que si il y a des caractères accentués, ceux-ci sont remplacés par un "?" :/

    Les variabkes cd.artist et cd.titleTracks sont issues d'une lecture CDDB (qui je crois encode en UTF8).

    Une idée pour arriver à avoir des accents dans es nom de fichiers ?

    PS : Je code sous Linux (Ubuntu 64bits)

    Merci

    Elekaj

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale (LC_CTYPE, "");

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par elekaj34 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main(void)
    {
    ...
    	char	*file;
    ...
    	sprintf(file,"%ls- %ls.mp3",cd.artist,cd.titleTracks[i]);
    }
    Gaffe !!! Ta variable "file" n'est qu'un simple pointeur. Tu ne peux pas lui mettre de data (du texte quoi) sans avoir d'abord alloué de mémoire pour les stocker...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mai 2007
    Messages : 108
    Par défaut
    Bon, pour reprendre de zéro, j'ai voulu faire un petit test.

    Voici le code source total de mon test.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <stddef.h>
    #include <locale.h>
     
    int main(void)
    {
    	char	line[256];
     
    	setlocale(LC_CTYPE, "fr_FR.UTF-8");
     
    	printf("Test1: Éh bè voilà des accentués !!\n");
    	sprintf(line,"Test2: Éh bè voilà des accentués !!\n");
    	printf("%ls",line);
    	return(0);
    }
    Aucun soucis à la compil (pas même de warnings). Mais à l'exécution :
    Test1: �h b� voil� des accentu�s !!
    Ce qui me chagrine, c'est que le test 2 n'apparait pas :/

    J'ai essayé avec LC_CTYPE à "fr_FR.ISO-8859-1" et "", le résultat est le même !!!!

    Elekaj

Discussions similaires

  1. absence de conversion de locale vers utf8 dans un code
    Par minibus dans le forum GTK+ avec C & C++
    Réponses: 8
    Dernier message: 12/08/2009, 11h32
  2. Conversion de date GMT en date locale
    Par mayayu dans le forum C
    Réponses: 10
    Dernier message: 17/05/2007, 15h23
  3. [Dates] Conversion heure GMT vers heure local
    Par ggjedi dans le forum Langage
    Réponses: 3
    Dernier message: 19/10/2006, 10h17
  4. mfc:conversion de UTC à l'heure locale
    Par gbardy dans le forum MFC
    Réponses: 2
    Dernier message: 04/08/2006, 22h58
  5. Conversion d'heures de GMT en Heure locale
    Par speedy1496 dans le forum Oracle
    Réponses: 7
    Dernier message: 25/07/2005, 16h59

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