# Code ascii étendu

**URL:** <https://www.debian-fr.org/t/code-ascii-etendu/35203>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203 "2016-02-21T03:56:52Z")\
**Posts on this page:** 15\
**Page:** 1

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/1 "2016-02-21T03:56:52Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/2 "2016-02-21T03:56:52Z")

</div>

> [@zerimbak](#):
>
> un caractère rectangulaire dont le code ascii étendu en décimal est 177.

Dans quel codepage ? ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

N’oublie pas non plus que ta console utilise plus que probablement de l’UTF-8 :

```auto
$ echo $LANG
```

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/3 "2016-02-21T03:56:52Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/4 "2016-02-21T03:56:56Z")

</div>

Un caractère UTF-8 c’est composé de plusieurs octets dès que tu sors de l’ASCII (\>127 quoi, voir [fr.wikipedia.org/wiki/UTF-8](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é.

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/5 "2016-02-21T03:56:57Z")

</div>

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

```auto
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

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/6 "2016-02-21T03:56:57Z")

</div>

[quote=“zerimbak”]'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 …[/quote]  
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).

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/7 "2016-02-21T03:56:58Z")

</div>

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 :

```auto
char c[3]={226,150,136} ;
printf("%s",c) ;
```

Merci pour ton aide

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/8 "2016-02-21T03:56:58Z")

</div>

[quote=“zerimbak”]Par contre il y a un méthode moins pénible pour l’affichage.

`
char c[3]={226,150,136} ;
printf("%s",c) ;
`[/quote]  
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) :

```auto

```

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/9 "2016-02-21T03:56:58Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:56 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/10 "2016-02-21T03:56:58Z")

</div>

> [@zerimbak](#):
>
> 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:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 3:57 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/11 "2016-02-21T03:57:03Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:57 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/12 "2016-02-21T03:57:04Z")

</div>

> [@zerimbak](#):
>
> 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](#):
>
> 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[/code]

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 3:57 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/13 "2016-02-21T03:57:04Z")

</div>

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 …

---

<div class="post-metadata">

**Author:** ![syam](https://www.debian-fr.org/user_avatar/www.debian-fr.org/syam/32/2951_2.png) [@syam](https://www.debian-fr.org/u/syam)\
**Post date:** [Février 21, 2016, 3:57 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/14 "2016-02-21T03:57:04Z")

</div>

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.

`$ echo -n "█" | od -t x1
0000000 e2 96 88
0000003`

---

<div class="post-metadata">

**Author:** ![zerimbak](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/z/cc9497/32.png) [@zerimbak](https://www.debian-fr.org/u/zerimbak)\
**Post date:** [Février 21, 2016, 3:57 UTC](https://www.debian-fr.org/t/code-ascii-etendu/35203/15 "2016-02-21T03:57:04Z")

</div>

Ok, ça marche !!  
Il ne me reste plus qu’à régler le problème avec ncurses.  
Merci
