我正在使用等于“STF:宋体”的 WideString 的 ExtractFileName。结果是'??'。
似乎 ExtractFileName 不能很好地处理 unicode。
unicode有等效的方法吗?
编辑:
这是我使用的线
NameStr := ExtractFileName(Name);
类型是:
NameStr:String;
Name:PWideChar
我正在使用等于“STF:宋体”的 WideString 的 ExtractFileName。结果是'??'。
似乎 ExtractFileName 不能很好地处理 unicode。
unicode有等效的方法吗?
编辑:
这是我使用的线
NameStr := ExtractFileName(Name);
类型是:
NameStr:String;
Name:PWideChar
您也可以TntSysUtils.WideExtractFileName
从TNT使用。
您似乎使用的是不支持 Unicode 的旧版 Delphi。解决办法是升级Delphi。
您可以使用自制版本的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。这真的有很大的不同。
Function ExtractFileNameW(const FN: widestring): widestring;
begin
Result := UTF8Decode(ExtractFileName(UTF8Encode(FN)));
end;