wcslwr und Umlaute



  • Hi,

    ich hab mal wieder ein Problem bei dem ich nicht weiter weiss.
    Ich würde gern einen wchar_t string mit wcslwr in lowercase umwandeln.
    Dazu hab ich mal folgenden codeschnipsel (man verzeihe mir die Ausgabe per winapi 😉

    wchar_t stringTest[] = L"aouAOUäöüÄÖÜß";
    wchar_t* stringTest2 = wcslwr(stringTest);
    MessageBox(0, stringTest2, 0, MB_OK);
    

    Nun sollte man ja erwarten, dass eine MessageBox mit tem Text "aouaouäöüäöüß" aufpoppt. Leider ist das nicht der Fall. Statdessen erscheint "aouaouäöüÄÖÜß". Wenn ich vorher mit setlocale(LC_ALL, "De_DE") bzw. _wsetlocale(LC_ALL, L"De_DE") die codepage auf Deutsch umstelle ändert sich das Ergebniss leider auch nicht.
    _UNICODE und UNICODE sind definiert.

    Gibt es eine Methode wie ich das, am besten für alle Sprachen auf einmal, zum funktioneiren bringe?

    Wenn ich jeden Benutzer vorher seine Sprache einstellen lassen müsste währe das zwar unschön aber immerhin schonmal ein Schritt in die richtige Richtung.



  • #include <windows.h>
    #include <locale> 
    
    int main()
    {
    #if UNICODE    
    
        wchar_t a[] =  L"aouAOUäöüÄÖÜß"; 
        wchar_t b[sizeof a];
    
        std::locale loc ("German_Germany");
    
        for (size_t i = sizeof a; i; --i)
           b[(i-1)] = tolower(a[i-1], loc);
    
        MessageBoxW(0, b, L"UNICODE", MB_OK);  
    #endif
        char c[(sizeof a)/2+1]; 
        WideCharToMultiByte( CP_ACP, 0, b, -1,
            c, sizeof b, NULL, NULL );
        MessageBoxA(0, c, "ASCII", MB_OK);
    }
    

    Hab das mal mit VS2005 VC++ 8.0 und std::locale loc ("German_Germany") zum Laufen gebracht.
    Es gibt bestimmt bessere Lösungen. Andere Compiler kommen z.B. mit diesem Code nicht zurecht.
    Es gibt auch Schriftarten , die diese Sonderzeichein überhaupt nicht bzw. anders anzeigen!
    Wcslwr() -> http://support.microsoft.com/kb/304497/DE/

    mfg



  • Vielen Dank, das funktioniert. Was mich allerdings etwas stutzig macht ist das mit std::locale loc("English_US"); auch "aouaouäöüäöüß" raus kommt.
    Naja mir solls recht sein...

    Achja, warum sollte der Code bei anderen Compilern Probleme machen? Zumindest der unicode Teil ist doch rein STL oder nicht?


Log in to reply