Article View: fr.comp.lang.c
Article #15426Re: getchar() sur source Unicode [Fut: Conversion int --> char]
From: Antoine Leca
Date: Mon, 19 Sep 2005 16:28
Date: Mon, 19 Sep 2005 16:28
79 lines
4254 bytes
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-mailReferences:
<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