Forum debian-fr.org

Rechercher:

* Connexion   * M’enregistrer

* FAQ    * Rechercher





Poster un nouveau sujet Répondre au sujet  [ 15 messages ] 
Auteur Message
 Sujet du message: code ascii étendu
MessagePosté: 18 Déc 2011 17:35 
Hors ligne
Grand posteur

Inscription: 28 Déc 2006 18:01
Messages: 181
bonjour,
j'aimerais pouvoir afficher dans ma console un caractère rectangulaire dont le code ascii étendu en décimal est 177.
J'utilise (en C), l'instruction printf("%c\n",177) mais le programme affiche un point d'interrogation.
Je suppose que %c ne concerne que les caractères ascii de base ...
Merci pour votre aide


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 18 Déc 2011 18:38 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2297
zerimbak a écrit:
un caractère rectangulaire dont le code ascii étendu en décimal est 177.

Dans quel codepage ? :mrgreen:

N'oublie pas non plus que ta console utilise plus que probablement de l'UTF-8 :
Code:
$ echo $LANG

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 18 Déc 2011 18:55 
Hors ligne
Grand posteur

Inscription: 28 Déc 2006 18:01
Messages: 181
La commande echo $LANG me donne :
FR_FR.UTF-8

j'ai regardé le tableau des caractère utf8 et j'ai vu que le 233 correspond normalement au é (e accent aigu).
Or mon programme ne m'affiche rien avec l'instruction : printf("%c\n",233)
J'ai fait d'autres essais mais ça ne donne rien.
Est-ce le %c qui pose problème ?

Merci


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 18 Déc 2011 20:57 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2297
Un caractère UTF-8 c'est composé de plusieurs octets dès que tu sors de l'ASCII (>127 quoi, voir https://fr.wikipedia.org/wiki/UTF-8 qui n'est qu'un codage particulier de l'unicode). Le langage C ne gère pas ça nativement : pour lui 1 caractère = 1 octet.

Le plus simple serait probablement :
- soit de taper (ou copier coller) le caractère directement (si tu édites ton fichier en UTF-8) mais pour les trucs exotiques comme le carré dont tu parles vaut mieux éviter
- soit tu retrouves le caractère en question dans le jeu unicode, tu convertis son code-point unicode en séquence d'octets UTF-8 et tu mets ça dans une chaîne littérale en échappant les valeurs en hexa. Pour le "é" (qui a l'avantage d'être en exemple sur Wikipedia) la séquence est C3 A9 donc : printf("s\xC3\xA9quence\n");

Bref c'est pas super pratique, sinon après faut utiliser des outils d'i18n qui te permettent de charger des ressources externes (gettext, ICU, ...) mais ça devient compliqué.

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 18 Déc 2011 23:20 
Hors ligne
Grand posteur

Inscription: 28 Déc 2006 18:01
Messages: 181
Salut
J'ai compris tes explications mais je galère.
J'ai trouvé sur une table unicode le code du caractère rectangulaire : 2588
voir
Code:
http://fr.wikipedia.org/wiki/Table_des_caract%C3%A8res_Unicode_%282000-2FFF%29

J'ai converti en utf8 , ce qui m'a donné D29688
Ensuite j'ai tapé l'instruction printf("\xD2\x96\x88") mais je n'ai pas le bon caractère.
J'ai vérifié plusieurs fois ma conversion donc je ne sais pas quoi faire ...

Merci


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 18 Déc 2011 23:38 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2297
zerimbak a écrit:
'ai trouvé sur une table unicode le code du caractère rectangulaire : 2588
[....]
J'ai converti en utf8 , ce qui m'a donné D29688
Ensuite j'ai tapé l'instruction printf("\xD2\x96\x88") mais je n'ai pas le bon caractère.
J'ai vérifié plusieurs fois ma conversion donc je ne sais pas quoi faire ...

T'as dû oublier un bit quelque part... c'est E2 96 88 (copié-collé le U+2588 depuis Wikipedia dans un fichier texte, vérifié avec un éditeur hexa et en C avec printf).

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 18 Déc 2011 23:58 
Hors ligne
Grand posteur

Inscription: 28 Déc 2006 18:01
Messages: 181
En effet j'ai commis 3 fois la même erreur, j'ai pris un E pour un D.Mais je retiens ta méthode de conversion.
Par contre il y a un méthode moins pénible pour l'affichage.

j'ai fait :
Code:
char c[3]={226,150,136} ;
printf("%s",c) ;

Merci pour ton aide


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 19 Déc 2011 00:34 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2297
zerimbak a écrit:
Par contre il y a un méthode moins pénible pour l'affichage.
Code:
char c[3]={226,150,136} ;
printf("%s",c) ;

Effectivement, mais il te faut aussi un null à la fin sinon t'as un débordement (et pas besoin de spécifier la taille du tableau, il fait ça tout seul) :
Code:
char c[] = {226, 150, 136, 0};

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 19 Déc 2011 00:40 
Hors ligne
Grand posteur

Inscription: 28 Déc 2006 18:01
Messages: 181
Mais mon problème n'est pas tout à fait résolu :

En effet je souhaite utiliser la fonction printw de la lib ncurses pour afficher le caractère rectangulaire mais contrairement à ce que je pensais cette fonction ne parvient pas à afficher le caractère en question.
j'ai essayé printw("\xE2\x96\88") et printw("%s",c) avec c={226,150,136}
Mais là c'est la cata, ça m'affiche toute une série de caractères quelconques (une dizaine).
Je ne sais pas si je dois ouvrir un nouveau fil ou si tu peux m'aider ?

Merci


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 19 Déc 2011 02:29 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2297
zerimbak a écrit:
Je ne sais pas si je dois ouvrir un nouveau fil ou si tu peux m'aider ?

Pas besoin d'ouvrir un nouveau fil... par contre pour ncurses je passe la main je connais pas assez.

Cela dit, vu que t'utilises ncurses ça serait pas plus simple d'inverser les couleurs et afficher un espace ? :mrgreen:

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 19 Déc 2011 15:26 
Hors ligne
Grand posteur

Inscription: 28 Déc 2006 18:01
Messages: 181
Ok, je vais voir ça ...
Concernant la conversion du code Unicode en hexa, quel éditeur hexa utilises-tu ?
Et avec la commande od est-ce possible ? Je n'y suis pas parvenu ...
Merci


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 19 Déc 2011 15:58 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2297
zerimbak a écrit:
Concernant la conversion du code Unicode en hexa, quel éditeur hexa utilises-tu ?

Okteta (programme KDE), pour ce que j'en fais ça me suffit largement.
zerimbak a écrit:
Et avec la commande od est-ce possible ? Je n'y suis pas parvenu ...

Comme ça ?
Code:
$ od -t x1 <<EOF
> 123
> é
> EOF
0000000 31 32 33 0a c3 a9 0a
0000010

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 19 Déc 2011 17:34 
Hors ligne
Grand posteur

Inscription: 28 Déc 2006 18:01
Messages: 181
J'ai essayé la commande od comme tu l'as fait sur ces exemple mais
j'aimerai avoir la traduction hexa de U+2588
Et pour l'instant ça ne me donne ce que je veux ...


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 19 Déc 2011 18:05 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Mai 2009 16:49
Messages: 2297
Copier le caractère à partir de la page Wikipedia en question (un jour faudra que je cherche l'équivalent de Alt+PavéNumérique sous Linux... c'est peut-être un des rares trucs où Windows se révèle un peu pratique).
Le coller dans la partie echo.
Code:
$ echo -n "█" | od -t x1
0000000 e2 96 88
0000003

_________________
testing/unstable (amd64) sous KDE4
https://github.com/syam44


Haut
 Profil  
 
 Sujet du message: Re: code ascii étendu
MessagePosté: 19 Déc 2011 18:26 
Hors ligne
Grand posteur

Inscription: 28 Déc 2006 18:01
Messages: 181
Ok, ça marche !!
Il ne me reste plus qu'à régler le problème avec ncurses.
Merci


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 15 messages ] 

Index du forum » Divers » Programmation


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
Flux RSS Flux RSS Liste des flux Liste des flux
Powered by phpBB® Forum Software © phpBB Group
Traduction par: phpBB-fr.com
SEO
[ Time : 0.128s | 11 Queries | GZIP : Off ]