WriteFile und Unicode? HILFE!



  • Hi,

    wenn ich mit WriteFile einen Unicode-String in eine schreibe, z. b. L"Hallo"

    sieht das in der Datei nicht so aus: Hallo
    sondern so: H a l l o $ §

    Hier der Code:

    TCHAR buffer[512] = TEXT ("Hallo");
        ::WriteFile (hFile, buffer, wcslen (buffer) * sizeof (buffer), &temp, NULL)
    

    Wie schon gesagt, schreiben tut er einwandfrei! Doch diese Leerzeichen zwischen den Buchstaben sind mehr als ärgerlich, auch das darauf gefolgte Systemzeichenzeugs sind auch ärgerlich.

    Wie kann ich mit WriteFile einen Unicodestring schreiben ohne ihn auf MultiByte-Zeichensatz zu konvertieren?

    Ich hab mal gelesen, wenn man eine Unicodedatei erstellt muß ein bestimmtes Byte an den Anfang der Datei gesetzt werden, weiß aber nicht was für eines 😞

    Bitte um Hilfe 🙂 Danke im voraus!



  • Äääh, Unicode == Multibyte...? Und die Leerzeichen sind vermutlich einfach 0x00-Zeichen welche dein Editor in Leerzeichen konvertiert hat um die Zeichen anzeigen zu können...



  • machste so:

    #include <iostream>
    
    #define _UNICODE
    #define UNICODE
    
    #include <windows.h>
    #include <tchar.h>
    
    using namespace std;
    
    int main( )
    {
        wchar_t file_name[ ] = L"C:\\test.txt";
        char unicode_mark[ ] = { 0xFF, 0xFE };
        wchar_t text[ ] = L"Hello!";
    
        void *file = CreateFile( file_name, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 );
    
        if( !file ) {
    
            cout << "File \"" << file_name << "\" could not be created or opened!" << endl;
            return EXIT_FAILURE;
        }
    
        unsigned long written;
    
        WriteFile( file, &unicode_mark, 2, &written, 0 );
        WriteFile( file, &text, wcslen( text ) * sizeof( wchar_t ), &written, 0 );
    
        CloseHandle( file );
    }
    

    Greetz, Swordfish



  • dankö!! Gibt es irgendwo ne Liste mit diesen besonderen 2 Bytes am Anfang der Datei was die Bedeuten und welcher Zeichesatz das ist?

    @junix
    WideCharToMultiByte

    Komisch, ich dachte immer WideChar ist Unicode und MultiByte ist Ansi?!



  • Guckst du:

    ➡ BOM

    Greetz, Swordfish


Log in to reply