Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/04/2008, à 17:47

elekaj34

Encodage des locales

Bonsoir,

Dans un programme en C, j'aimerais que les accents apparaissent correctement (terminal en UTF8)

Donc j'ai écrit pour test le petit bout de code suivant qui marche imppec :

#include <stdio.h>
#include <stddef.h>
#include <locale.h>

int main()
{
        setlocale(LC_CTYPE, "fr_FR.UTF-8");
        const wchar_t *text = L"texte avé dè acçents";
        printf("%ls\n", text);
        return 0;
}

Sauf que bien evidemment dans beaucoup de programme, le texte a afficher n'est pas une constante.

J'ai tenté un :

sprintf(file,L"Texte avé des accentués");

Bien evidemment, ça ne fonctionne pas :
A la compil :

main.c:11: attention : passing argument 1 of «sprintf" from incompatible pointer type
main.c:11: attention : passing argument 2 of «sprintf" from incompatible pointer type

et forcement erreur de fragmentation à l'exec !

Même résultat avec :

printf(L"Texte avé dè acçents");

Comment faire pour afficher un texte en utilisant les locale ?

Merci pour votre aide.


Alain - Linux Ubuntu 18.04 LTS 64bits
Lumières d'Ici ... et d'Ailleurs

Hors ligne

#2 Le 25/04/2008, à 18:48

robrob

Re : Encodage des locales

Tu as une solution très simple qui consiste à avoir ton source en UTF-8
Et hop plus de pb de différence d'encodage entre le texte contenu dans le source et l'affichage wink

edit:
Sinon le problème que tu as c'est que printf n'accepte pas des wchar en entrée. Il me semble qu'il existe une autre fonction pour ça (wprintf ?).

Dernière modification par robrob (Le 25/04/2008, à 18:50)

Hors ligne

#3 Le 25/04/2008, à 19:18

elekaj34

Re : Encodage des locales

Re

Mes fichiers sont encodés en UTF 8 et pourtant l'affichage des accents montre un ?

Le but est bien d'encoder les locales (car par la suite, je compte aussi générer des fichiers avec des accents)


Alain - Linux Ubuntu 18.04 LTS 64bits
Lumières d'Ici ... et d'Ailleurs

Hors ligne

#4 Le 26/04/2008, à 11:01

robrob

Re : Encodage des locales

Si

printf("%ls\n", text);

fonctionne. Est-ce qu'un

sprintf(file,"%ls", L"Texte avé des accentués");

ne marcherait pas?

Je dis "si...fonctionne" car j'ai essayé ton source et chez moi il n'affiche rien du tout.

Hors ligne

#5 Le 26/04/2008, à 11:07

nicolas.sitbon

Re : Encodage des locales

elekaj34 a écrit :

et forcement erreur de fragmentation à l'exec !

ça c'est fort, une erreur de fragmentation sous linux : c'est une première!!!

Non, plus sérieusement, j'avoue avoir du mal à comprendre ton problème dans la mesure ou tu as déjà toutes les réponses...
Bref un exemple vaut mieux qu'un long discours, j'ai repris le tiens :

#include <wchar.h>
#include <locale.h>

int main(void)
{
   setlocale (LC_CTYPE, "");
   
   wchar_t const *text = L"texte avé dè acçents";
   wprintf (L"%S\n", text);
   
   wchar_t buffer[20];
   wscanf (L"%19S", buffer);
   wprintf (L"%S\n", buffer);
   
   return 0;
}

Hors ligne