WideCharToMultiByte probleme



  • Moin,

    ich wollte einen Unicode String in einen ISO 8859-1 String umwandeln. Alle Zeichen die nicht in der code page vorhanden sind sollen aus dem String herausfliegen. Ich habe das Ganze mit Hilfe der WideCharToMultiByte Funktion versucht. Das Problem ist nur, dass nach der Konvertierung der buffer leer ist. Alle Zeichen nach dem nicht erlaubten Zeichen verschwinden und nicht wie erwartet nur das unerlaubte Zeichen.

    CString csTmp = _T("€test"); // in der code page nicht vorhandenes Zeichen €
    	char buffer[255];
    	ZeroMemory(buffer, 255);
    	BOOL b = TRUE;
    	if(WideCharToMultiByte(28591, 0, csTmp, -1, buffer, 255, "", &b) == 0)
    	{
    		ASSERT(FALSE);
    	}
    

    Steht im csTmp "bla€test" dann ist nach der Konvertierung nur noch "bla" übrig.

    Was mache ich verkehrt?



  • Morgen Lupus,

    der Buffer ist nicht leer. Es steht "\0test\0\0\0..." drinne.

    LpDefaultChar ist bei Dir "". WideCharToMultiByte nimmt hieraus das 1. Zeichen um nicht konvertierbare Zeichen zu ersetzen, also \0.

    cu, Bernd



  • Gibt es denn eine Möglichkeit, dass das Zeichen entfernt wird, anstatt es durch '\0' zu ersetzen?



  • Hi Lupus,

    das weiß ich nicht, sieht aber für mich nicht so aus.

    Als "Würgaround" nimm als Ersatzzeichen ein sonst ungenutztes Zeichen wie \xff und lösche das danach.

    cu, Bernd

    BOOL b = TRUE;
    	if(WideCharToMultiByte(28591, 0, csTmp, -1, buffer, 255, "\xff", &b) == 0)
    	{
    		; // ASSERT(FALSE);
    	}
    	char * src, * dst;
    	for ( src = buffer, dst = buffer; *src; src++ )
    	{
    		if ( *src != (char)0xff )
    			*dst++ = *src;
    	}
    	*dst = 0;
    


  • Danke bst2

    habe das mit dem Replace nach der Konvertierung schon eingebaut, finde nur der Weg ist nicht gerade der schönste und hatte gehofft es gibt noch eine bessere Möglichkeit.


Anmelden zum Antworten