Unicode und ReadFile(...



  • Hallo alle miteinander,

    ich habe eine ziemlich simple XML-Datei:

    <?xml version="1.0" encoding="utf-8" ?> 
    <Language Sprache="Japanisch">
    	<WindowTitle>日本語</WindowTitle>
    </Language>
    

    in dieser stehen 3 japanische Zeichen, welche wie ich gerade sehe hier nicht angezeigt werden können. Die XML-Datei liegt also im Unicode-Format vor. Diese möchte nun Zeilenweise auslesen um bei einer Suchanfrage z.B.: nach <WindowTitle> den Value dazu zu erhalten (also die japan. Schriftzeichen).
    Ich habe dabei erstmal allgemein versucht die XML-Datei in einer MessageBox darzustellen, was leider nicht richtig klappt:

    void ReadLangFile()
    {
    	HANDLE hFile;
    	hFile = CreateFile(L"Japanisch.xml", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
    	int iFileLength = GetFileSize(hFile, NULL);
    	PBYTE pBuffer = (PBYTE)malloc(iFileLength+2);
    	DWORD dwBytesRead;
    	ReadFile(hFile, pBuffer, iFileLength, &dwBytesRead, NULL);
    	CloseHandle(hFile);
    	pBuffer[iFileLength] = '\0';
    	pBuffer[iFileLength+1] = '\0';
    	LPCTSTR cText[1024];
    	MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pBuffer, -1, (LPWSTR)cText, 1024);
    	MessageBox(0, (LPCTSTR)cText, (LPCTSTR)L"", MB_OK);
    }
    

    Wie schaffe ich es nun in der DialogBox auch den Unicode-Text anzeigen zu lassen. (#define UNICODE ist im Code gesetzt).
    Ich hatte es bereits mit XPath des MSXML-Parsers probiert, aber da bin ich nicht weit gekommen. Wenn mir also jemand zeigen könnte, wie man diesen korrekt einbindet und eine simple Suche nach irgendetwas in der XML-Datei ausführt wäre ich auch sehr dankbar.

    MfG zco



  • zco schrieb:

    Die XML-Datei liegt also im Unicode-Format vor.

    Nein. Die Datei ist 7Bit-ASCII. Die japanischen Zeichen sind offenbar als HTML-character reference codiert.

    Du bräuchtest etwas wie HtmlDecode, aber AFAIK gibt es das für WinAPI nicht.



  • Im Internet-Explorer zeigt der die Zeichen aber korrekt an.



  • zco schrieb:

    Im Internet-Explorer zeigt der die Zeichen aber korrekt an.

    Der Internetexplorer zeigt auch < korrekt an. Das liegt daran, dass er als Browser dazu da ist, HTML-Entitys zu decodieren.



  • Also ist es kurz gesagt nicht möglich die Daten aus so einer XML-Datei auszulesen und dann auf einem Fenster korrekt darzustellen? 😞



  • Natürlich ist es möglich, du musst nur deine XML Datei als Unicodestring vorliegen haben und dann manuell parsen. Dabei würde die & #26085; -Sequenz(8 Zeichen) in den 16-Bit-Wert 0x65E5 umgewandelt werden, um ein gültiges Unicode-Zeichen darzustellen. Danach kannst du den String mit jeder unicodefähigen Funktion benutzen.


Anmelden zum Antworten