Bonsoir tout le monde
J'ai un probleme avec le code unicode en c
Je sais que 009 = é
J'ai le même problème avec la librairie gtk.Code:
1
2
3 printf("Précedant");
en signalent que l'afficha est différent.
Cordialement
A bientôt
Version imprimable
Bonsoir tout le monde
J'ai un probleme avec le code unicode en c
Je sais que 009 = é
J'ai le même problème avec la librairie gtk.Code:
1
2
3 printf("Précedant");
en signalent que l'afficha est différent.
Cordialement
A bientôt
Salut,
Le caractère 'é' a le code 0x00e9 en hexadécimal. Je n'ai par contre jamais essayé d'utiliser unicode en C.
Je crois que tu peux utiliser le type wchar_t (#include <wchar.h>) et les fonctions correspondantes telles que wprintf(wchar_t *,...), wscanf(wchar_t *,...) ou encore iswdigit(wchar_t), mais la définition de wchar_t est, je crois, dépendante du compilateur et donc peu portable (l'avis des spécialistes serait le bienvenu).
Je ne peux en dire plus sur le sujet. Salutations
Thierry
Salux,
C'est difficile la première fois, c'est comme les pointeurs, puis un jour on y reflechit de plus pres et tout s'eclaire au niveau de l'encodage (mais c'est pas une question de C). On élude trop ces histoires d'encodage, et on a tort parce que c'est assez compliqué.
nié? 9 c'est la tabulationCitation:
009 = é
Non, ça c'est dans l'encodage Latin1/Latin9 (et accessoirement windows-1252)Citation:
Le caractère 'é' a le code 0x00e9 en hexadécimal
Qu'est ce qu'il se passe exactement avec «printf("Précedant");» ?
Dans quel terminal est ce executé?
Si c'est sous unixoïde, quelle est la "consolefont" du terminal?
Si c'est sous dos (ou ligne de commande dos sous winwin), quel est le "codepage" ?
Avec ces considérations vient une autre : d'ou vient le texte constituant les sources du programme? L'encodage de ces sources détermine l'encodage de la chaine litterale "Précédent".
Les bons éditeurs de sources permettent de choisir l'encodage dans lequel enregistrer les sources.
Si c'est notepad sous winwin, l'encodage est windows 1252.
Si c'est un éditeur sous linux, verifie qu'il enregistre pas en UTF-8 (on s'est tous fait avoir au moins une fois) et choisis Latin1 (aka iso-8859-1) (ou Latin9 aka iso-8859-15) à la palce
Tu peux aussi rester en UTF-8 mais aies conscience que cette fois, tes chaines litterales seront "multi byte", et par exemple strlen() renverrait une valeur erronnée.
Si c'est le cas en Latin-1, c'est aussi le cas en Unicode, donc on peut dire que le 'é' possède le code 0x00E9.
Sous unixoïde, les consoles ont généralement le même charset que le reste de l'interface graphique, souvent ISO 8859-1 (Latin-1), ISO 8859-15 (Latin-9) ou UTF-8.
Sous Windows, pour des raisons historiques, les consoles ont un charset dit "OEM", généralement CP437 (US) ou CP850 (Occidental), alors que le reste de l'interface est généralement en CP1252 (Occidental).
Un moyen d'afficher correctement les accents sur une console Windows est de traduire avant affichage avec la fonction CharToOemA().
Sinon, quand on écrit directement en unicode, on peut utiliser WriteConsoleW() qui écrit les accents correctement, mais qui ne marche que pour les consoles (si on redigire la sortie vers un fichier, WriteConsoleW() ne marchera pas).
Les caractères U+0000 à U+00FF de la norme Unicode sont les mêmes que ceux du jeu de caractère Latin-1.Citation:
Non, ça c'est dans l'encodage Latin1/Latin9 (et accessoirement windows-1252)Citation:
Citation:
Le caractère 'é' a le code 0x00e9 en hexadécimal
Médinoc a été encore plus precis, bien joué
Ouay c'est vrai, mais tu avais pas précisé que tu parlais du code UnicodeCitation:
Les caractères U+0000 à U+00FF de la norme Unicode sont les mêmes que ceux du jeu de caractère Latin-1.
.. car en général l'unicode est utilisé via l'utf-8 auquel cas 0x00e9 n'est pas 'é'
Bonjour tout le monde
Pouriez vous me dire comment faire faire avec la syntaxe svp?
Merci.
Cordialement
A bientôt
Bonjour tout le monde
Voici ce que j'ai fais
Il y a une erreur de syntaxe, je ne vois pas comment la corriger.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf(g_locale_to_utf8("précédent")); system("PAUSE"); return 0; }
Cordialement
A bientôt
:sm: g_locale_to_utf8 est une fonction de la GLib, pour pouvoir l'utiliser il te faut linker la GLib avec ton projet et aussi inclure l'entête:Citation:
Envoyé par argon
La GLib n'est pas standard, il faut l'installer, va voir sur le site de GTK+ pour la télécharger suivant ton système !Code:#include <glib.h>
Pour finir, cette fonction retourne un pointeur sur une zone allouée qu'il faut libérer avec la fonction g_free, donc pas bon du tout de l'utiliser directement avec printf. Stock le resultat "puis" utilise ce pointeur dans ton printf puis libère l'adresse !
Un petit conseil, si tu tiens tant que ca à utiliser la GLib, utilise la alors entièrement parce que si c'est juste pour cette fonction bin c'est un peu gros je trouve. Par exemple, si tu compte l'utiliser, tu peux utiliser la fonction g_printf au lieu de printf, il te suffit pour cela d'inclure l'entête:
Voilà mes derniers mots ;)Code:#include <glib/gprintf.h>
Tu aurais enregistré ton source en UTF-8, ça serait revenu au meme