shFileoperation 和德语变音符号

shFileoperation and german Umlaute

我有这个功能。

procedure DeleteToBin(filename:string);
var
fileOpStruct : TSHFileOpStruct;
filename_a :ansistring;
begin
  filename_a := filename + #0#0;
  //showmessage(filename_a);
  fileOpStruct.Wnd := Application.MainFormHandle;
  fileOpStruct.wFunc := FO_DELETE;
  fileOpStruct.pFrom := PAnsiChar(filename_a); 
  fileOpStruct.fFlags := FOF_ALLOWUNDO + FOF_NOCONFIRMATION;
  SHFileOperation( fileOpStruct );
end;

它适用于普通路径和文件,例如:C:\mypath\myfile.ext。但是一旦我处理包括德语 Umlaute 在内的文件,它就会失败,例如:C:\mypööö\myfileüüü.ext

我尝试了所有我能想到的转换(比如 UTF 到 ANSI),但没有得到预期的效果。 顺便说一下:showmessage 显示了正确可读的德语文件名。

需要什么样的转换才能使其工作?

感谢 Remy 和 David 以及 utf8Decode,我通过这种方式得到了 运行: (2018-04-17 编辑)

procedure DeleteToBin(filename:string);
var

fileOpStruct : TSHFileOpStructW;
filename_a :string;
begin
  filename_a := utf8Decode('p:\bilder[=10=]_test\mümü.txt' + #0);
  fileOpStruct.Wnd := Application.MainFormHandle;
  fileOpStruct.wFunc := FO_DELETE;
  fileOpStruct.pFrom := PWideChar(filename_a);
  fileOpStruct.fFlags := FOF_ALLOWUNDO + FOF_NOCONFIRMATION;

  showmessage(inttostr(SHFileOperationW( @fileOpStruct )));

end;