🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#15666
From: Antoine Leca
Date: Thu, 15 Sep 2005 17:09
54 lines
3777 bytes
En <news:43299c1a$0$29448$636a15ce@news.free.fr>,
    Alain CROS va escriure:
> "Emmanuel Delahaye" <emdel@YOURBRAnoos.fr> a �crit dans le message de
> news: mn.746d7d599f15346c.15512@YOURBRAnoos.fr...
>
> J'ai fait un petit test en rempla�ant getchar par la lecture d'un
> fichier texte que j'avais pr�alablement enregistr� au format UNICODE.

Je suppose que vous �tes sous Windows (le .txt) et que � UNICODE � pour vous
signifie en fait UTF-16.

> Comme je l'avais pr�vu, �a ne fonctionne pas.

Le contraire aurait �t� surprenant.

> Si je change le type du tableau de char en int, �a compile

Le fait que � cela compile � est rarement int�ressant en soi. On ne fait pas
des programmes pour qu'ils compilent, mais pour qu'ils remplissent des
fonctions. Idem pour les biblioth�ques. L�, vous �tes en train d'utiliser
une fonction de biblioth�que (getchar() ou printf()) en dehors de son
domaine de d�finition, donc elle ne remplit pas son usage.

Il y a d'autres fonctions beaucoup plus adapt�es � votre nouveau probl�me ;
en C sous Windows, les � caract�res UNICODE � s'appellent des wchar_t, et la
plupart des fonctions qui manipulent des caract�res � non-UNICODE � ont un
double avec un w quelque part dans le nom, pour traiter les � caract�res
UNICODE �. Ainsi, printf() va devenir wprintf(), idem pour getwc(). Il faut
aussi dire au compilateur que les cha�ne du programme sont diff�rentes, ce
que l'on fait en les pr�fixant avec L, L"\n%ls\nj = %u\n". Et il y a un
pi�ge cach� dans le code d'Emmanuel, � propos de sizeof : je vous le laisse
d�couvrir.


On peut aussi faire les manipulations � � la mimine � avec getc(), en lisant
les char par couple ; mais l� je pose une question : que voulez-vous sortir
? des caract�res normaux, ou UNICODE ?

Dans le premier cas, vous �tes dans la bonne voie avec printf(), manque �
seulement � la conversion d'un codage � l'autre (C n'est pas vraiment un
langage de haut niveau, il ne fait rien si vous ne lui dites pas
explicitement de le faire).

Dans le second, c'est typiquement plus facile avec wprintf(), mais il faut
adapter tout le programme au wchar_t, L'\n', WEOF, %ls...


>  f = fopen("Wide.txt","r");

Utilisez "rb" avec getc(), car ce n'est plus du texte manipulable.



Antoine
Technical Details
Message-ID: <dgc9t3$5hd$1@shakotay.alphanet.ch>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!solnet.ch!solnet.ch!news.imp.ch!news.imp.ch!80.83.46.147.MISMATCH!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>

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!news4.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!newsfeed01.sul.t-online.de!t-online.de!solnet.ch!solnet.ch!news.imp.ch!news.imp.ch!80.83.46.147.MISMATCH!news.alphanet.ch!alphanet.ch!not-for-mail
From: "Antoine Leca" <root@localhost.invalid>
Newsgroups: fr.comp.lang.c
Subject: getchar() sur source Unicode [Fut: Conversion int --> char]
Date: Thu, 15 Sep 2005 19:09:55 +0200
Organization: Posted through ALPHANET (http://www.alphanet.ch/)
Lines: 55
Sender: antoinel@143.red-217-127-250.pooles.rima-tde.net
Message-ID: <dgc9t3$5hd$1@shakotay.alphanet.ch>
References: <43285040$0$14548$636a55ce@news.free.fr> <mn.746d7d599f15346c.15512@YOURBRAnoos.fr> <43299c1a$0$29448$636a15ce@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-15"
Content-Transfer-Encoding: 8bit
X-Trace: shakotay.alphanet.ch 1126804196 5677 217.127.250.143 (15 Sep 2005 17:09:56 GMT)
X-Complaints-To: usenet@alphanet.ch
NNTP-Posting-Date: Thu, 15 Sep 2005 17:09:56 +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