Domanda

Ho console app. scritto in Delphi 2010. E 'uscita è Unicode supportato. (Io ho usato UTF8Encode e SetConsoleOutputCP (CP_UTF8) per questo). Quando eseguo il programma dal prompt dei comandi funziona benissimo.
Ora voglio leggere l'output da un altro programma che è stato creato in Delphi 5 . Io uso questo metodo . Ma non ho problemi con caratteri unicode.
Qualcuno ha una raccomandazione di leggere l'output unicode di console app. da Delphi 5?

È stato utile?

Soluzione 3

Ho cambiato quarantina come segue e funziona benissimo:
In applicazione console, non ho usato SetConsoleOutputCP (CP_UTF8). Solo uscita uso stringa ...
E alla altro programma (Delphi 5), io uso questa funzione senza l'uso OemToChar (Buffer, Buffer)

Altri suggerimenti

Delphi 5 ha supporto unicode, ma solo attraverso WideStrings che sono UTF-16 (-LE) codificato. Nativamente, D5 non ha il supporto UTF-8.

È possibile leggere l'output del D2010 console app in modo che già fanno, anche se vorrei prendere la conversione OemToAnsi. OemToAnsi è stato sostituito (anche in D5 giorni) di OemToChar che possono essere usati per convertire i caratteri OEM a Ansi (caratteri singolo byte utilizzando varie pagine di codice) o WideString (UTF-16-LE Unicode), ma non fare una cosa per interpretare i byte UTF-8 in arrivo e potrebbe solo complicare le cose.

Quello che vi serve è un insieme di funzioni che possono prendere tutti i utf-8 "grezzo" si byte hanno letto dal tubo e convertirli in (UTF-16-LE codificato) WideStrings che è quindi possibile alimentare a un controllo che può prendere e mostrare WideStrings. In alternativa si potrebbe cercare un controllo che fa l'interpretazione di byte "grezzo" e la conversione tutto in sé, ma devo ammettere che non ho visto nessuno e tanto meno uno che supporta ancora D5.

Una libreria che può convertire molte codifiche differenti e supporta ancora D5 è DIUnicode: http://www.wikitaxi.org/delphi/doku.php/products/unicode/index

Hai due problemi che utilizzano Delphi 5 con uscita unicode.

La prima è TMemo non supporta i caratteri Unicode è necessario trovare un altro controllo, come ad esempio quelli in TMS Unicode Component pack . Tuttavia, questo pacchetto componente non supporta Delphi 5.

Il secondo problema è con questa parte del codice:

  repeat
    BytesRead := 0;
    ReadFile(ReadPipe,Buffer[0],
    ReadBuffer,BytesRead,nil) ;
    Buffer[BytesRead]:= #0;
    OemToAnsi(Buffer,Buffer) ;
    AMemo.Text := AMemo.text + String(Buffer) ;
  until (BytesRead < ReadBuffer) ;

Si sta leggendo lui caratteri, ponendoli in tampone che è un PChar (singolo carattere per byte in D5) Quindi digitare colata presente in una stringa che è un AnsiString in D5.

Anche se non ho utilizzato D5 per anni, l'unico tipo che mi ricordo che in grado di gestire i dati Unicode in D5 è WideString.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top