UTF-8 Resource richtig laden



  • Hallo,

    weiß jmd wie man folgende Zeichen "Кири́ллица öüa" aus einer Resource in MFC richtig laden kann? Die Resource als solches (html Resource) hab ich als Unicode UTF-8 ohne Signatur abgespeichert.

    LPSTR lpcHtml = static_cast<LPSTR>(LockResource(hHeader));
    

    in lpcHtml steht danach leider nichts brauchbares. ""Кири́ллица
    üöä" liefert mir lpcHtml

    Auch wenn ich danach versuche diesen Strig zu konvertieren von UTF-16 to UTF-8 (weil Windows intern mit UTF-16 arbeitet) kommt nichts brauchbares heraus.

    Hierzu verwende ich diese Funktionen:
    http://www.codeproject.com/KB/string/utfConvert.aspx

    Wenn ich CString test ("Кири́ллица öüa") schreibe und anschließend diesen konvertiere mit UTF-16-to-UTF-8 dann funktioniert es auch; aber nicht aus einer Resource heraus.

    Vielleicht hat jmd ein paar wertvolle Tipps.

    LG
    Markus



  • wenn ich die geladene Resource in ein ByteArray umwandle kommen folgende Zahlen zum Vorschein:

    LPSTR lpcHtml = static_cast<LPSTR>(LockResource(hHeader));
    CString rString = CString(lpcHtml);
    
    CByteArray cbyte; 
    cbyte.SetSize(rString .GetLength());		
    memcpy(cbyte.GetData(),rString , (rString .GetLength())); 
    
    UINT eins = cbyte.GetAt(0);    //ist 239
    UINT zwei = cbyte.GetAt(1);    //ist 0
    UINT drei = cbyte.GetAt(2);    //ist 187
    UINT vier = cbyte.GetAt(3);    //ist 0
    UINT fünf = cbyte.GetAt(4);    //ist 191
    


  • Markus W. schrieb:

    wenn ich die geladene Resource in ein ByteArray umwandle kommen folgende Zahlen zum Vorschein:

    LPSTR lpcHtml = static_cast<LPSTR>(LockResource(hHeader));
    CString rString = CString(lpcHtml);
    
    CByteArray cbyte; 
    cbyte.SetSize(rString .GetLength());		
    memcpy(cbyte.GetData(),rString , (rString .GetLength()));
    

    richtig sind die Zahlen natürlich

    UINT eins = cbyte.GetAt(0);    //ist 208
    UINT zwei = cbyte.GetAt(1);    //ist 0
    UINT drei = cbyte.GetAt(2);    //ist 97
    UINT vier = cbyte.GetAt(3);    //ist 1
    UINT fünf = cbyte.GetAt(4);    //ist 208
    

    hatte zuvor vergessen die BOM beim UTF-8 zu löschen.


Anmelden zum Antworten