Socket recv mit Unicode Zeichen
-
Ich habe hier ein Programm das Sockets nutzt und lese mit der Funktion recv eine XML-Datei vom Server, die allerdings UFT-8 kodiert ist. Nun habe ich gesehen, dass recv keine Unicode-Variante hat. Wie gehe ich hier am besten vor?
Mit recv alle chars lesen und dann mit MultiByteToWideChar konvertieren?
Bisher lese ich das Ergebnis direkt in einen CString und schreib es dann in eine Datei.
Hat hier jemand Erfahrung was der beste Ansatz ist?
-
Den char* den recv(..) als Buffer nimmt, soll als Byte Buffer verstanden werden.
Es hat nichts mit Strings zu tun. Zufälligerweise benutzen C- Strings (Null terminierte Strings) den gleichen Datentyp.Also:
1. Null terminierte (Wide-Char) Strings als char* re- interpretieren.
2. Länge des Buffers ermitteln.Simon
-
Danke für den Tipp.
Hab es jetzt so gemacht, dass ich das Ergebnis von recv in einen char-Array speichere und danach in einen CStringW mit MultiByteToWideChar konvertiere.Funktioniert sehr gut.
-
Das ist aber Quatsch. Es braucht keine Konvertierung von Multibyte zu Unicode falls der übertragende String schon in Unicode vorliegt. char* bedeutet nicht gleich Multibyte oder Unicode oder was auch immer.
Simon
-
Wieso soll das Quatsch sein? Die ankommenden Zeichen sind UTF-8 kodiert - also MBSC. Hab ich ja auch so in der Einleitung geschrieben. Rausbekommen will ich einen Unicode-String.
Dementsprechend muss ich das also konvertieren.
-
[FALSCH]UTF-8 ist doch Unicode und nicht MBSC![/FALSCH]
recv
empfängt einzelne Bytes - deshalb der Datentypchar
. Das hat nicht mit dem was diese Bytes letztendlich darstellen zu tun sondern stellen einfach einen Buffer aus einzelnen Bytes dar.Edit: Sry, UTF-8 ist doch MultiByte.
-
Jetzt hab ich schon schwer an mir gezweifelt