在命令行参数中使用带有 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"