Ich bekomme von anderen statckoverflow post die unten aufgeführte Funktion.App Konsole Ausgabe und korrekte Codierung zu TMemo in Delphi
Ich habe ein Codierungsproblem mit akzentuierten Zeichen, um das Ergebnis in einem TMemo anzuzeigen. wenn ich für Probe verwenden:
Memo1.Text := GetDosOutput('Help DIR');
Mein Memo1.Text zeigt:
"Exibe uma lista de arquivos e subdiret¢rios em um diret¢rio.
DIR [unidade:][caminho][arquivo] [/A[[:]atributos]] [/B] [/C] [/D] [/L] [/N]
[/O[[:]ordem_de_classifica‡Æo]] [/P] [/Q] [/R] [/S] [/T[[:]campo_de_tempo]]
[/W] [/X] [/4]
.......
"
Bitte Wie konvertiere ich das Ergebnis String der Funktion zeigt korrekt in TMemo?
Ich versuchte
Memo1.Text := UnicodeString(GetDosOutput('Help DIR'));
aber keinen Blick.
function GetDosOutput(CommandLine: string; Work: string = 'C:\'): string;
var
SA: TSecurityAttributes;
SI: TStartupInfo;
PI: TProcessInformation;
StdOutPipeRead, StdOutPipeWrite: THandle;
WasOK: Boolean;
Buffer: array[0..255] of AnsiChar;
BytesRead: Cardinal;
WorkDir: string;
Handle: Boolean;
begin
Result := '';
with SA do begin
nLength := SizeOf(SA);
bInheritHandle := True;
lpSecurityDescriptor := nil;
end;
CreatePipe(StdOutPipeRead, StdOutPipeWrite, @SA, 0);
try
with SI do
begin
FillChar(SI, SizeOf(SI), 0);
cb := SizeOf(SI);
dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
wShowWindow := SW_HIDE;
hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect stdin
hStdOutput := StdOutPipeWrite;
hStdError := StdOutPipeWrite;
end;
WorkDir := Work;
Handle := CreateProcess(nil, PChar('cmd.exe /C ' + CommandLine),
nil, nil, True, 0, nil,
PChar(WorkDir), SI, PI);
CloseHandle(StdOutPipeWrite);
if Handle then
try
repeat
WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
if BytesRead > 0 then
begin
Buffer[BytesRead] := #0;
Result :=Result + Buffer;
end;
until not WasOK or (BytesRead = 0);
WaitForSingleObject(PI.hProcess, INFINITE);
finally
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
end;
finally
CloseHandle(StdOutPipeRead);
end;
end;
Was ist damit falsch ist? Welches Ergebnis erwartest du? –
Konsole gibt Text in der OEM-Zeichensatzcodierung zurück. Sie möchten es entweder in eine bestimmte ANSI-Codepage konvertieren (wahrscheinlich 1252 von dem, was gegeben wird: 'ó'>' ¢ ') oder in Unicode, abhängig von der Version von Delphi, die Sie verwenden. Sie können entweder 'OEMToCharBuff' verwenden oder mit' TEncoding' konvertieren. –
@JerryDodge ist es ziemlich offensichtlich - er erwartet 'subdiretórios' und bekommt' subdiret ¢ rios'. –