UTF8 Decoding
- 
					
					
					
					
 Die Funktion wird im Programm noch garnicht aufgerufen weil ich ja immernoch dabei bin sie erstmal richtig hinzukriegen. CString DecodeUTF8(CString UTF8Text) { TCHAR m[strlen(UTF8Text)]; // ERROR WCHAR w[500]; strcpy(m, UTF8Text); MultiByteToWideChar(CP_UTF8, 0, m, -1, w, sizeof(w) / sizeof(WCHAR)); WideCharToMultiByte(CP_ACP, 0, w, -1, m, sizeof(m), 0, 0); CString AnsiText = m; return AnsiText; }Und genau das verursacht die zuvor genannten Errors. 
 Wenn ich es aber als TCHAR m[500] mach hat der Kompiler keine Probleme damit.
 
- 
					
					
					
					
 Ok Problem gelöst  CString DecodeUTF8(CString UTF8Text) { TCHAR* m = new TCHAR[strlen(UTF8Text)]; WCHAR* w = new WCHAR[strlen(UTF8Text)]; strcpy(m, UTF8Text); MultiByteToWideChar(CP_UTF8, 0, m, -1, w, strlen(m)); WideCharToMultiByte(CP_ACP, 0, w, -1, m, strlen(m), 0, 0); CString AnsiText = m; return AnsiText; }Vielen Dank Leute  
 
- 
					
					
					
					
 man kann auch die benötigte stringlänge abfrangen indem man die output buffer größe auf 0 setzt. das halte ich für besser. 
 
- 
					
					
					
					
 In meinem Artikel das Beispiel ganz unten... 
 http://www.c-plusplus.net/forum/viewtopic-var-t-is-161855.html
 
- 
					
					
					
					
 Wo viel "new" ist sollte auch viel "delete" sein. 
 Nimm als Buffer doch einfach 2 Vektoren.
 So wie du das derzeit hast wird es leaken, da die beiden angeforderten Buffer nie freigegeben werden.
 
- 
					
					
					
					
 hustbaer schrieb: Wo viel "new" ist sollte auch viel "delete" sein. Meinst Du mich!? Ok, hab ein Fehler im Fehlerfall rausgemacht  
 
- 
					
					
					
					
 mit std::vector wäre das nicht passiert 
 
- 
					
					
					
					
 ist das nicht basiswissen wenn man einen speicher auf dem heap (new) resviert ihn dann auch mit delete wieder löscht???  mit std::vector wäre was nicht passiert  
 
- 
					
					
					
					
 @Jochen Kalmbach: Nö, ich meinte dashier: 
 (sorry, hätte es gleich quoten sollen)someone schrieb: Ok Problem gelöst  CString DecodeUTF8(CString UTF8Text) { TCHAR* m = new TCHAR[strlen(UTF8Text)]; WCHAR* w = new WCHAR[strlen(UTF8Text)]; strcpy(m, UTF8Text); MultiByteToWideChar(CP_UTF8, 0, m, -1, w, strlen(m)); WideCharToMultiByte(CP_ACP, 0, w, -1, m, strlen(m), 0, 0); CString AnsiText = m; return AnsiText; }Vielen Dank Leute  Und da ist garkein delete. *schauder* 
 Und wieder bin ich an dem Punkt wo ich feststelle: std::auto_array fehlt doch, z.B. weil so viele Leute keinen std::vector verwenden, auch wenn es ginge @LowFly: ja, schon Basiswissen, erzähl das mal "_someone_".  
 
- 
					
					
					
					
 dieser someone hat ja wirklich überhaupt keinen plan. der frickelt sich alles zusammen. 
 
- 
					
					
					
					
 als ich das ganze dann nochmal durchgeschaut hab, hatte ich das mit den deletes natürlich bemerkt  
 aber am Anfang übersieht man halt schnell mal dinge wie '*' oder delete CString DecodeUTF8(CString UTF8Text) { TCHAR* m = new TCHAR[strlen(UTF8Text)+1]; WCHAR* w = new WCHAR[strlen(UTF8Text)+1]; strcpy(m, UTF8Text); MultiByteToWideChar(CP_UTF8, 0, m, -1, w, strlen(UTF8Text)); WideCharToMultiByte(CP_ACP, 0, w, -1, m, strlen(UTF8Text), 0, 0); CString AnsiText = m; delete[] m; delete[] w; return AnsiText; }
 
- 
					
					
					
					
 [quote="_someone_"] TCHAR* m = new TCHAR[strlen(UTF8Text)+1]; WCHAR* w = new WCHAR[strlen(UTF8Text)+1];Warum verwendest Du hier "strlen"??? ein CString hat eine Methode welche die Länge zurückliefert... "strlen" geht nur, wenn Du *nicht* mit UNICODE übersetzt... 
 
