在命令行参数中使用带有Process的德语字符

问题描述 投票:1回答:2

我想在TProcess参数中使用像ö,a,ü这样的德语字符和CommandLine。更具体地说,我正在尝试打开一个资源管理器窗口,该窗口显示一个文件夹,其中包含其名称/路径中的字符。这是代码:

strFolderPath := '"C:\FolderName_Ä"'
RunProgram := TProcess.Create(nil);
RunProgram.CommandLine := 'C:\Windows\explorer.exe ' + strFolderPath;
RunProgram.Execute;
RunProgram.Free;

显然在CommandLine财产中使用ü/ä/ö不起作用。我可以使用哪种方式在字符串中正确编码?

lazarus freepascal
2个回答
2
投票

如果我转换为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(...)逐个添加参数。


0
投票

在当前的trunk和3.2.x分支中,您可以使用processunicode单元中的TProcess,它与unicodestring一起使用。

这也适用于没有拉撒路且没有拉撒路“utf8hack”的程序

© www.soinside.com 2019 - 2024. All rights reserved.