#1 Le 22/10/2008, à 11:49
- djitar
Problème d'affichage de caractères de la table ASCII
Bonjour,
A l'aide du code ci-dessous (écrit en C), j'aimerais afficher l'ensemble des caractères de la table ASCII.
#include <stdio.h>
int main ()
{
int i;
for (i=0; i<256; i++)
printf ("[%d, %c] ", i, i);
return 1;
}
Le seul problème est que les caractères ne s'affichent pas correctement sous Linux (par contre sous windows ça passe !).
Sous le terminal (Konsole), j'ai tenté de modifier le type d'encodage (en UTF8) mais en vain.
Si qqun a une solution ou une idée, elle serait la bienvenue.
Merci
Hors ligne
#2 Le 22/10/2008, à 12:24
- philou8237
Re : Problème d'affichage de caractères de la table ASCII
Un caractère ASCII est codé sur 7 bit, il y en a donc 128 et non 256.
les premiers caractères de la table ASCII (les 31 premiers si je me souviens bien) ne sont pas des caractères imprimables. Tu y retrouve entre autres '\0', '\r', '\n', etc... qui ont dût mettre un beau bordel dans ton affichage si tu as voulu les afficher à l'écran
Regarde bien le man de ascii pour voir quels sont les caractères imprimables.
Hors ligne
#3 Le 22/10/2008, à 12:26
- ®om
Re : Problème d'affichage de caractères de la table ASCII
L'encodage par défaut en UTF-8 (c'est l'encodage qui devrait être utilisé partout).
L'ASCII (jusqu'au numéro 127) est commun à tous les encodages.
Et les nombres de 128 à 256, ça ne veut rien dire en UTF-8 (ça passe sur 2 octets) : http://fr.wikipedia.org/wiki/UTF-8
Hors ligne
#4 Le 22/10/2008, à 12:41
- tiky
Re : Problème d'affichage de caractères de la table ASCII
Bonjour,
A l'aide du code ci-dessous (écrit en C), j'aimerais afficher l'ensemble des caractères de la table ASCII.
#include <stdio.h>
int main ()
{
int i;
for (i=0; i<256; i++)
printf ("[%d, %c] ", i, i);
return 1;
}Le seul problème est que les caractères ne s'affichent pas correctement sous Linux (par contre sous windows ça passe !).
Sous le terminal (Konsole), j'ai tenté de modifier le type d'encodage (en UTF8) mais en vain.Si qqun a une solution ou une idée, elle serait la bienvenue.
Merci
Bonjour,
Chez moi il affiche correctement la table ASCII. Les caractères de cette table sont codés sur 7 bits, par conséquent le dernière caractère ASCII est donné par le nombre décimal 127. Tout les caractères de cette table ne sont pas affichables. Tout les caractères au-delà ne sont pas de la table ASCII.
http://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
Sous DOS, l'encodage du terminal utilisé la page de code 850. Une extension de l'ASCII qui utilise le bit de poids fort de l'octet pour ajouter 128 caractères spécifiques.
http://fr.wikipedia.org/wiki/Page_de_code_850
Pour connaître l'encodage dans le terminal, tape:
locale
Note: il faut que l'encodage du terminal et celui de ton éditeur correspondent.
Chez moi c'est UTF-8:
http://fr.wikipedia.org/wiki/Utf-8
Comme tu peux le voir, l'UTF-8 utilise soit 1, 2, 3 ou 4 octets pour coder les caractères. Lorsqu'il s'agit d'un octet, le bit de poids fort est à 0. l'UTF-8 se comporte alors comme la table ASCII. Ça permet la compatibilité avec les anciens logiciels. Et c'est pour ça que l'affiche est incohérent sous Linux car le terminal attend un second octet si le premier commence par 110 et ce second octet doit impérativement commencer par un 10.
Autre remarque:
Ton programme retourne 1. Un programme doit retourner 0 lorsqu'il se déroule correctement.
Dernière modification par tiky (Le 22/10/2008, à 14:01)
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#5 Le 22/10/2008, à 12:50
- tiky
Re : Problème d'affichage de caractères de la table ASCII
#include <stdio.h>
int main( void )
{
char i = 0xC3;
char j = 0xA9;
printf("%c%c", i, j );
return 0;
}
Affiche é dans un terminal en UTF-8. 2 octets sont nécessaires.
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#6 Le 22/10/2008, à 13:14
- djitar
Re : Problème d'affichage de caractères de la table ASCII
Salut,
Tout d'abord merci à tous pour vos réponses. Au fait quand j'ai parlé de ASCII, je sous entendais ASCII étendue (désolé pour le manque de précision). Sinon, si je comprend bien il n'est pas possible, sous un terminal Linux, d'afficher ces caractères supplémentaires ???
Pour être plus clair, je désire afficher les caractères qui permettent de dessiner un tableau ( ┼, ├, ┬, etc ...). Leur code ASCII étant supérieur à 127, comment pourrai-je faire alors ?
@tiky :
1) Autant pour moi, l'affichage de la table ASCII passe bien mais pas les caractères imprimables.
2) Bien entendu, le programme retourne 0 en cas de succès mais j'ai du faire un couper coller (le return 1 vient d'un autre bout de code)
3) Le code que t'as posté, utilise de l'hexadécimal. Quel est son utilité ?
Merci.
Hors ligne
#7 Le 22/10/2008, à 13:25
- ®om
Re : Problème d'affichage de caractères de la table ASCII
Pour être plus clair, je désire afficher les caractères qui permettent de dessiner un tableau ( ┼, ├, ┬, etc ...). Leur code ASCII étant supérieur à 127, comment pourrai-je faire alors ?
Quel encodage? IBM850?
Si oui, par exemple ┼ est le code C5 (197), et pour l'afficher dans une console utf-8 (où le même caractère ┼ correspond aux octets e294bc), il faut faire :
echo c5 | xxd -p -r | iconv -f ibm850 -t utf-8
Mais préfère utiliser de l'utf8 qu'un encodage bidon (ascii "étendu").
Hors ligne
#8 Le 22/10/2008, à 13:44
- tiky
Re : Problème d'affichage de caractères de la table ASCII
J'utilise de l'hexadécimal car c'est plus rapide à convertir en binaire que le décimal.
0xC3 = 1100 0011 ( 0xC = 1100 et 0x3 = 0011 )
0xA9 = 1010 1001 ( 0xA = 1010 et 0x9 = 1001 )
Comme tu peux le voir, on peut découper les bytes ( et plus particulièrement les octets ) en tranches de 4 bits pour les convertir en hexadécimal. On peut d'ailleurs faire la même chose pour l'octal en découpant en tranches de 3 bits.
Ça vient du fait que 8 et 16 sont des puissances de 2 alors que 10 non
Tiens je viens de remarque un truc amusant:
2^3 = 8 donc on regroupe par groupe de 3 en base 8
2^4 = 16 donc on regroupe par groupe de 4 en base 16
2^5 = 32 donc on regroupe par groupe de 5 en base 32 :p
Dernière modification par tiky (Le 22/10/2008, à 14:07)
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#9 Le 22/10/2008, à 14:08
- djitar
Re : Problème d'affichage de caractères de la table ASCII
Salut,
Finalement ça marche. J'ai sélectionné comme type d'encodage IBM850 (Settings -> Encoding -> Western European (ibm850) pour info) dans le terminal "Konsole". Ensuite j'ai testé ce bout de code :
#include <stdio.h>
int main ()
{
printf (" - %c - %c - %c - %c -", 218, 194, 191, 195);
return 0;
}
Et là l'affichage passe correctement. Merci à tous encore une fois pour vos réponses.
Hors ligne
#10 Le 22/10/2008, à 14:20
- tiky
Re : Problème d'affichage de caractères de la table ASCII
Salut,
Finalement ça marche. J'ai sélectionné comme type d'encodage IBM850 (Settings -> Encoding -> Western European (ibm850) pour info) dans le terminal "Konsole". Ensuite j'ai testé ce bout de code :
#include <stdio.h>
int main ()
{
printf (" - %c - %c - %c - %c -", 218, 194, 191, 195);
return 0;
}Et là l'affichage passe correctement. Merci à tous encore une fois pour vos réponses.
Oui enfin ça sert un peu à rien...
Sinon j'ai vérifié ce que j'ai dit au-dessus ( qui sert aussi à rien ):
813 en décimal ça donne 11001 01101 en binaire. Donc on peut l'écrire en 2 chiffres en base 32 ce qui donne PD ( pas fait exprès ! ).
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#11 Le 22/10/2008, à 14:22
- ®om
Re : Problème d'affichage de caractères de la table ASCII
#include <stdio.h>
int main ()
{
printf ("\u253c\n");
return 0;
}
Hors ligne