🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #15426

Re: getchar() sur source Unicode [Fut: Conversion int --> char]

#15426
From: Antoine Leca
Date: Mon, 19 Sep 2005 16:28
79 lines
4254 bytes
En <news:432ec68a$0$3758$626a14ce@news.free.fr>, Alain CROS va escriure:
> Oui, je suis sur Windows 98,

:-(
Pour Unicode, cela va ajouter des p�pins...


>> mais l� je pose une question : que voulez-vous
>> sortir ? des caract�res normaux, ou UNICODE ?
>
> Le but serait d'afficher � l'�cran (caract�res normaux) le texte
> contenu dans le fichier.

Bon, alors cela va �tes relativement facile : avec Windows 98, pas de vrai
Unicode � l'�cran � fond noir (qui d�pend du DOS). Il faut passer par une
fen�tre Windows � fond blanc, et arriver � cela est une autre paire de
manches; de plus, le r�sultat sera bien inf�rieur � ce que propose en
standard le bloc-notes de Windows ou Wordpad...


> Donc je lis chaque char avec getc(), je ne prend pas en compte les 0.

C'est d�j� un bon d�but. De cette mani�re simpliste, vous transformez votre
flux UTF-16 en flux iso-8859-1 (le m�me encodage que celui de ce message),
qui est affichable simplement par Windows (y compris dans une fen�tre DOS
� � fond noir �).
Cependant, abstenez-vous d'utiliser tous les caract�res � jolis �  de
Windows, tel l'euro, le oe, l'apostrophe pench�e etc. (une sp�cialit� de
Microsoft Word est justement de g�n�rer les dits caract�res): tous ces
caract�res n'ont pas de correspondants dans iso-8859-1.


> Il semblerait que les 2 premiers char du fichier correspondent � un
> code qui doit vouloir dire texte en UNICODE.

Oui. Il s'agit d'un seul caract�re, dit BOM, de code 0xFEFF (stock� �
l'envers comme normal avec une machine Intel, donc un octet � 0xFF, puis un
octet � 0xFE).

> Ces 2 char sont -1 et -2 affich� par printf avec %u.

Signe ind�niable que vous stockez des signed char, alors que ce sont des
unsigned char ou mieux encore des int. D'ailleurs, si vous ne prenez pas de
pr�cautions...

> Le premier -1 correspond � EOF mais je ne comprend pas pourquoi ma
> boucle de lecture ne s'arr�te pas puisqu'elle teste EOF.

Elle teste EOF correctement, car Emmanuel a pris la pr�caution de vous le
faire stocker dans un int tampon.


>  int c;

Tampon.


>  while ((c = getc (f)) != '\n'

On mets dans le tampon.

>   && c != EOF

et on teste un int, c'est OK. Le premier 0xFF vaut +0x000000FF, ce qui
diff�rent de -1 (repr�sent� par 0xFFFFFFFF).

>    string[j] = c;

L� on range le caract�re dans un (signed) char, donc +0x000000FF est tronqu�
� 0xFF, et cela produit un d�bordement et le remplacement par -0x01 :-(


>  printf("%u\n%u\n%u\n", string[0] , string[1], EOF);

Bouh. %u vaut pour �crire des valeurs non sign�es. string[x] comme EOF sont
des int, donc sign�s, il faut utiliser %d.


Antoine
Technical Details
Message-ID: <dgmove$r4h$1@shakotay.alphanet.ch>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!newsread.com!newsprint.newsread.com!news-out1.kabelfoon.nl!newsfeed.kabelfoon.nl!bandi.nntp.kabelfoon.nl!195.40.0.165.MISMATCH!easynet-monga!easynet.net!oleane.net!oleane!freenix!news.alphanet.ch!alphanet.ch!not-for-mail
References: <43285040$0$14548$636a55ce@news.free.fr> <mn.746d7d599f15346c.15512@YOURBRAnoos.fr> <43299c1a$0$29448$636a15ce@news.free.fr> <dgc9t3$5hd$1@shakotay.alphanet.ch> <432ec68a$0$3758$626a14ce@news.free.fr>

Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,2c3d52d9f1b4dc77
X-Google-Attributes: gidf9822,public
X-Google-Language: FRENCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!newsread.com!newsprint.newsread.com!news-out1.kabelfoon.nl!newsfeed.kabelfoon.nl!bandi.nntp.kabelfoon.nl!195.40.0.165.MISMATCH!easynet-monga!easynet.net!oleane.net!oleane!freenix!news.alphanet.ch!alphanet.ch!not-for-mail
From: "Antoine Leca" <root@localhost.invalid>
Newsgroups: fr.comp.lang.c
Subject: Re: getchar() sur source Unicode [Fut: Conversion int --> char]
Date: Mon, 19 Sep 2005 18:28:30 +0200
Organization: Posted through ALPHANET (http://www.alphanet.ch/)
Lines: 80
Sender: antoinel@143.red-217-127-250.pooles.rima-tde.net
Message-ID: <dgmove$r4h$1@shakotay.alphanet.ch>
References: <43285040$0$14548$636a55ce@news.free.fr> <mn.746d7d599f15346c.15512@YOURBRAnoos.fr> <43299c1a$0$29448$636a15ce@news.free.fr> <dgc9t3$5hd$1@shakotay.alphanet.ch> <432ec68a$0$3758$626a14ce@news.free.fr>
NNTP-Posting-Host: 143.red-217-127-250.pooles.rima-tde.net
Mime-Version: 1.0
Content-Type: text/plain;
 charset="iso-8859-1"
Content-Transfer-Encoding: 8bit
X-Trace: shakotay.alphanet.ch 1127147311 27793 217.127.250.143 (19 Sep 2005 16:28:31 GMT)
X-Complaints-To: usenet@alphanet.ch
NNTP-Posting-Date: Mon, 19 Sep 2005 16:28:31 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1506
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1506