0

我正在使用等于“STF:宋体”的 WideString 的 ExtractFileName。结果是'??'。

似乎 ExtractFileName 不能很好地处理 unicode。

unicode有等效的方法吗?

编辑:

这是我使用的线

NameStr := ExtractFileName(Name);

类型是:

NameStr:String;

Name:PWideChar
4

4 回答 4

4

您也可以TntSysUtils.WideExtractFileNameTNT使用。

于 2011-04-05T08:01:35.720 回答
1

您似乎使用的是不支持 Unicode 的旧版 Delphi。解决办法是升级Delphi。

于 2011-04-05T07:28:44.347 回答
0

您可以使用自制版本的ExtractFileName,如下所示:

function ExtractFileNameW(FullPath:WideString):WideString;
var i,pos:Integer;
begin
  // Find the last path separator
  pos := -1;
  for i:=Length(FullPath) downto 1 do
    if (FullPath[i] = '/') or (FullPath[i] = '\') then
    begin
      pos := i;
      Break;
    end;
  if pos = -1 then
    Result := FullPath
  else
    begin
  Result := '';
      SetLength(Result, Length(FullPath)  - pos);
      System.Move(FullPath[pos+1], Result[1], (Length(FullPath) - pos) * SizeOf(WideChar));
    end;
end;

...但如果你真的需要处理 Unicode 字符,你应该升级到 XE。这真的有很大的不同。

于 2011-04-05T10:33:59.620 回答
0
Function ExtractFileNameW(const FN: widestring): widestring;
 begin
  Result := UTF8Decode(ExtractFileName(UTF8Encode(FN)));
 end;
于 2013-11-26T11:20:49.230 回答