Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de ::  WinAPI ::  InternetReadFile wchar_t Problem
Antwort schreiben
Benutzername:
Titel:
Nachrichtentext:
  :)  :D  ;)  :(  :p  :mad:  :rolleyes:  :eek:  :confused:  :cool:  :o)  :leak:  :live:  :die:  :idea:  :arrow:  :warning: 
                             
                         
         
           
                             
                             
                             
             


BBCode in diesem Beitrag deaktivieren [BBCode]
Smilies in diesem Beitrag deaktivieren
InternetReadFile wchar_t Problem and 306019
     


Themen-Überblick 
(Aktualisieren)
Autor Nachricht
merano
20:42:42 22.07.2012   Titel:   Zitieren

floorball schrieb:
wird dein Problem nicht lösen, aber wieso forderst du response mit new an?


Und wenn schon dann dann müsste es wg. "Number of bytes to be read" später
260 * sizeof(wchar_t) heissen. Vermutlich wäre es aber besser einen
char* zu verwenden.
floorball
20:26:29 22.07.2012   Titel:   Zitieren

wird dein Problem nicht lösen, aber wieso forderst du response mit new an?
nwp3
15:58:33 16.07.2012   Titel:   Zitieren

So wie ich das verstanden habe gibt dir InternetReadFile weder einen char * noch einen wchar_t *. Es gibt dir den Inhalt der Datei/URL die du angibst und hat selbst keine Ahnung was dieser bedeutet. Es liegt also an dir den Inhalt zu interpretieren, je nachdem ob du eine .html, .txt, .png oder was auch immer lädst.
Belli
15:55:03 16.07.2012   Titel:   Zitieren

Wieso? Wenn die Seite Dir char-codierte Informationen schickt, dann hast Du halt nur ein Byte für ein Zeichen, wchar aber will 2 Byte für ein Zeichen.
Und ja, wenn das so ist, dann musst Du entweder mit char / string arbeiten, oder eben zu wchar / wstring konvertieren.
cappend
15:20:42 16.07.2012   Titel:   Zitieren

Zitat:
nur ein wstring kann damit halt nichts anfangen.

Die Frage ist wieso? Wenn ich das ganze aber in einem wstring speichern möchte, weil ich später noch mit diesem String weiter arbeiten muss mit Unicode Funktionen, soll ich dann einfach ein string zu wstring konvertieren?
Belli
07:27:48 16.07.2012   Titel:   Zitieren

cappend schrieb:

In meinen Projekteigeneschaften habe ich den Zeichensatz auf Unicode gestellt. Von daher ist es automatisch InternetReadFileW.

Da die Funktion überhaupt nicht mit Zeichen hantiert, vermute ich, dass es keine unterschiedlichen A / W - Versionen gibt.
Die Funktion schreibt die erhaltenen Daten ja einfach in einen Puffer auf den mit einem void - Pointer gezeigt wird.
Ich schätze mal, dass die Seite einfach char's liefert. Das ist dann natürlich unabhängig davon, ob Du die Daten in einen string oder in einen wstring packst - nur ein wstring kann damit halt nichts anfangen.
cappend
01:47:34 16.07.2012   Titel:   Zitieren

Schonmal vielen Dank für die Antworten.

Zitat:
InternetReadFileW

In meinen Projekteigeneschaften habe ich den Zeichensatz auf Unicode gestellt. Von daher ist es automatisch InternetReadFileW.

Zitat:
Du kannst mbstowcs bzw wcstombs benutzen um die Darstellungsarten ineinander umzuwandeln. Wenn du aber einfach umcastest fehlinterpretiert er jeweils 2 chars als wchar_t und es kommt Blödsinn raus.

Das Problem ist, dass ich garnichts caste. Das wchar_t gebe ich sofort mit MessageBoxW aus. Wenn ich mein Projekt auf Multibyte umstelle und dann noch aus dem wchar_t * ein char * mache, dann „rbuf“ mit MessageBoxA ausgebe, dann ist alles richtig. Ich finde den Fehler ganz einfach nicht...
nwp3
22:02:45 15.07.2012   Titel:   Zitieren

wchar_t ist quasi 16-bit Unicode. Das heißt es gibt 2 Byte pro Zeichen statt einem. Es erlaubt neben "normalen" Buchstaben auch chinesisch und ähnliches, was man mit chars nicht ausdrücken kann. Du kannst mbstowcs bzw wcstombs benutzen um die Darstellungsarten ineinander umzuwandeln. Wenn du aber einfach umcastest fehlinterpretiert er jeweils 2 chars als wchar_t und es kommt Blödsinn raus.
foo0
22:02:17 15.07.2012   Titel:   Zitieren

InternetReadFileW
cappend
18:37:27 15.07.2012   Titel:   InternetReadFile wchar_t Problem Zitieren

Ich verusche mit InternetReadFile eine Website auszulesen. Doch sobald ich wchar_t statt char verwende, bekomme ich nur komische Zeichen zurück.

Hier der Auschnitt:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
std::wstring rbuf;
wchar_t *response = new wchar_t[260];
DWORD iread = 0;
 
while(InternetReadFile(hOpenUrl, response, 260, &iread))
{
    if(iread == 0)
        break;
 
    rbuf += response;
    response[iread - 1] = '\0';
}

Den Teil mit InternetOpen und der anderen Vorarbeit habe ich weg gelassen, da es ja mit einem char * geht und die Funktionen keinen Fehler zurück geben.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.