Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » UTF8 Decoding

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
11.11.2006, 11:13 Uhr
CppProgrammer



Morgen
Ich bin gerade dabei eine UTF8 Decoding Funktion zu schreiben (zB. hähä -> hähä). Sie läuft auch soweit, jedoch ist sie von einem Array abhängig, sodass die Funktion fehl schlägt, sobald der zu dekodierende String länger als das Array ist. Meine Frage ist, wie man das ganze ohne Array lösen kann, oder zumindest dem Array automatisch die entsprechende größe zuweisen kann (TCHAR m[strlen(UTF8Text)] funktioniert nämlich nicht).


C++:
CString DecodeUTF8(CString UTF8Text)
{
    TCHAR m[500]; 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;
}



Danke schon mal für eure Hilfe

Dieser Post wurde am 11.11.2006 um 11:18 Uhr von CppProgrammer editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.11.2006, 18:34 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,
könnte dir so sogar abschmieren, bei sowas immer strncpy benutzen!


C++:
CString DecodeUTF8(CString UTF8Text)
{
    TCHAR m = new TCHAR[UTF8Text.GetLength()+1];
    WCHAR w = new WCHAR[UTF8Text.GetLength()+1];

    // hier passt das strcpy, da wir ja "m" groß genug haben
    strcpy(m, UTF8Text);

    MultiByteToWideChar(CP_UTF8, 0, m, -1, w, UTF8Text.GetLength() / sizeof(WCHAR));
    WideCharToMultiByte(CP_ACP, 0, w, -1, m, UTF8Text.GetLength(), 0, 0);

    CString AnsiText = m;
    delete[] m;
    delete[] w;
    return AnsiText;
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.11.2006, 18:47 Uhr
CppProgrammer



Ok, vielen Dank FloSoft
Ich hab das ganze jetzt letztendlich so gelöst:

C++:
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;
}


 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.11.2006, 23:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,
wenn "CString" die MFC-string-Klasse ist solltest du nicht strlen benutzen. strlen mappt je nachdem ob du mit unicode oder eben ohne kompilierst auf die jeweiligen, wodurch du unterschiedliche ergebnisse bekommen (kannst). GetLength ist das strlen vom CString.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.11.2006, 05:44 Uhr
CppProgrammer



ah ok, das werd ich dann mal besser mit berücksichtigen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: