Einzelnen Beitrag anzeigen

nobby

Registriert seit: 1. Sep 2004
12 Beitrge
 
#1

Unicode ber Pipe in Delphi empfangen

  Alt 17. Apr 2011, 15:52
Hallo zusammen

In einer bestehenden Delphi-Applikation wird eine in VC++ geschriebene Console-Anwendung mittels 'CreateProcess' gestartet und dessen cout-Meldungen ber 'CreatePipe' abgefangen und in eimem TMemo angezeigt. Das klappte in D2007 und ANSI-Text bis anhin ganz gut.

Nun habe ich die Aufgabe, die ganze Applikation Unicode-fhig zu machen. D.h. die VC++ Console-Anwendung soll Unicode-Meldungen an das Delphi-GUI senden. Den Delphi-Teil habe ich bereits erfolgreich auf XE migriert. Zum testen der Pipe-Kommunikation habe ich ein einfaches C++ Consoleprogramm (UNICODE) geschrieben, welches folgende Unicode-Meldung (L = Unicode string literal) ber wcout absetzt:

std::wcout << L"Using wcout: Кирилица ǽлљΣča" << std::endl;

In einer DOS-Konsole (cmd mit Lucida Unicode Font) wird die Meldung korrekt dargestellt. Ebenso wenn ich den Output mit >> in eine Datei umleite.

Wird das Programm aber von Delphi aus gestartet, empfange ich nicht die gewnschten Daten! Wenn ich die empfangenen Daten als buffer of Char (WideChar in XE) behandle, erhalte ich:

獕湩⁧捷畯㩴퀠킚톸킀킸킻톸킆₰ꣃ꧃룃黃뷇믐駑ꏎꛃ跄ൡ

Wenn ich die Pipedaten in einen AnsiChar buffer einlese, erhalte ich:

Using wcout: Кирилица èéøÞǽлљΣæča

D.h. zumindest die Chars < 128 werden richtig interpretiert (was auf eine UTF-8 Kodierung hindeutet).
Wenn ich die anderen Zeichen als Doppel-Byte interpretiere, erhalte ich Werte im Bereich von $C300-$D1FF welche im chinesischen Bereich von Unicode liegen - sollten aber im kyrillischen Bereich um $0400 liegen.

Um das Problem einzugrenzen, habe ich versucht, eine Delphi XE-Konsoleanwendung zu erstellen. Diese ist aber mit WriteLn nicht Unicode-fhig.

Hat jemand einen Hinweis oder eine Idee dazu?

Besten Dank,
Nobby
  Mit Zitat antworten Zitat