在命令行参数中使用带有 Process 的德语字符
Using german characters with TProcess within the CommandLine Parameter
我正在尝试在 CommandLine
参数中将“ö,a,ü”等德语字符与 TProcess
结合使用。更具体地说,我试图打开一个资源管理器 window,它显示一个文件夹,其中包含 name/path 中的字符。这是代码:
strFolderPath := '"C:\FolderName_Ä"'
RunProgram := TProcess.Create(nil);
RunProgram.CommandLine := 'C:\Windows\explorer.exe ' + strFolderPath;
RunProgram.Execute;
RunProgram.Free;
显然在 CommandLine
属性 中使用 ü/ä/ö 不起作用。我可以使用哪种方式在字符串中对它们进行正确编码?
如果我将 strFolderpath(如果您的程序是使用 Lazarus 开发的,它可能是 UTF8)转换为 Ansi,它对我有用:
uses
LazUTF8;
procedure TForm1.Button1Click(Sender: TObject);
var
strFolderPath: String;
P: TProcess;
begin
strFolderPath := UTF8ToWinCP('d:\äöü');
P := TProcess.Create(nil);
P.CommandLine := 'C:\Windows\explorer.exe ' + strFolderPath;
// better:
// P.Executable := 'C:\windows\explorer.exe';
// P.Parameters.Add(strFolderPath);
P.Execute;
P.Free;
end;
另请注意,TProcess.CommandLine 已弃用。推荐的方法是将二进制文件放入 TProcess.Executable 中,然后通过 TProcess.Parameters.Add(...).
一个一个地添加参数
在当前主干和 3.2.x 分支中,您可以使用 processunicode 单元中的 TProcess,它与 unicodestring 一起使用。
这也适用于没有 lazarus 和没有 lazarus 的程序 "utf8hack"
我正在尝试在 CommandLine
参数中将“ö,a,ü”等德语字符与 TProcess
结合使用。更具体地说,我试图打开一个资源管理器 window,它显示一个文件夹,其中包含 name/path 中的字符。这是代码:
strFolderPath := '"C:\FolderName_Ä"'
RunProgram := TProcess.Create(nil);
RunProgram.CommandLine := 'C:\Windows\explorer.exe ' + strFolderPath;
RunProgram.Execute;
RunProgram.Free;
显然在 CommandLine
属性 中使用 ü/ä/ö 不起作用。我可以使用哪种方式在字符串中对它们进行正确编码?
如果我将 strFolderpath(如果您的程序是使用 Lazarus 开发的,它可能是 UTF8)转换为 Ansi,它对我有用:
uses
LazUTF8;
procedure TForm1.Button1Click(Sender: TObject);
var
strFolderPath: String;
P: TProcess;
begin
strFolderPath := UTF8ToWinCP('d:\äöü');
P := TProcess.Create(nil);
P.CommandLine := 'C:\Windows\explorer.exe ' + strFolderPath;
// better:
// P.Executable := 'C:\windows\explorer.exe';
// P.Parameters.Add(strFolderPath);
P.Execute;
P.Free;
end;
另请注意,TProcess.CommandLine 已弃用。推荐的方法是将二进制文件放入 TProcess.Executable 中,然后通过 TProcess.Parameters.Add(...).
一个一个地添加参数在当前主干和 3.2.x 分支中,您可以使用 processunicode 单元中的 TProcess,它与 unicodestring 一起使用。
这也适用于没有 lazarus 和没有 lazarus 的程序 "utf8hack"