Delphi - ExtractFileName портит юникод - PullRequest
0 голосов
/ 05 апреля 2011

Я использую ExtractFileName WideString, равное 'STF: 宋体'. Результат: «??».

Похоже, что ExtractFileName плохо обрабатывает юникод.

Есть ли эквивалентный метод для Unicode?

Edit:

Это строка, которую я использую

NameStr := ExtractFileName(Name);

типы:

NameStr:String;

Name:PWideChar

Ответы [ 4 ]

4 голосов
/ 05 апреля 2011

Вы также можете использовать TntSysUtils.WideExtractFileName из TNT .

1 голос
/ 05 апреля 2011

Вы, кажется, используете старую версию Delphi без поддержки Unicode.Решение - обновить Delphi.

0 голосов
/ 26 ноября 2013
Function ExtractFileNameW(const FN: widestring): widestring;
 begin
  Result := UTF8Decode(ExtractFileName(UTF8Encode(FN)));
 end;
0 голосов
/ 05 апреля 2011

Вы можете использовать версию 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;

... но если вам действительно нужно иметь дело с символами Юникода, вам следует перейти на XE. Это действительно имеет большое значение.

...