我想在TProcess
参数中使用像ö,a,ü这样的德语字符和CommandLine
。更具体地说,我正在尝试打开一个资源管理器窗口,该窗口显示一个文件夹,其中包含其名称/路径中的字符。这是代码:
strFolderPath := '"C:\FolderName_Ä"'
RunProgram := TProcess.Create(nil);
RunProgram.CommandLine := 'C:\Windows\explorer.exe ' + strFolderPath;
RunProgram.Execute;
RunProgram.Free;
显然在CommandLine
财产中使用ü/ä/ö不起作用。我可以使用哪种方式在字符串中正确编码?
如果我转换为strFolderpath(如果您的程序是使用Lazarus开发的话可能是UTF8),它对我有用:
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(...)逐个添加参数。
在当前的trunk和3.2.x分支中,您可以使用processunicode单元中的TProcess,它与unicodestring一起使用。
这也适用于没有拉撒路且没有拉撒路“utf8hack”的程序