下面是Delphi XE-8的功能吗?

时间:2015-12-23 21:06:36

标签: delphi utf-8

function Trim_emo(SL: TStringList): TStringList;
var
  I:Integer;
  S:string;
begin
  Result := TStringList.Create;
  if (SL.Text='') then
  begin
    Exit;
  end;
  try
    Result.Clear;
    for I := 0 to SL.Count-1 do
    begin
      S := SL[I];
      S := Trim(S);
      if (S<>'') then
        Result.Add(ANSIUpperCase(S));
    end;
  except
    on E : exception do
      ShowMessage(E.Message);
  end;
end;

当StringList包含UTF-8字符时,此函数是否正常工作?

1 个答案:

答案 0 :(得分:3)

您的代码永远不会处理UTF-8字符,因为它永远不会遇到它们。 Delphi字符串是UTF-16编码的。如果您想知道代码如何与Unicode输入一起使用,那么就没有问题了。 UTF-16是完整的Unicode编码。

您的代码存在一些问题:

  • 如果引发异常,代码将泄漏字符串列表实例。
  • 您的异常处理已被破坏。如果引发并处理异常,则会显示错误消息。但是,执行仍然没有发生任何事情。只需删除异常处理并让异常向上浮动。
  • 评估Text只是为了检查输入是否为空是浪费的。如果输入不为空,您可以创建一个非常长的字符串,然后立即丢弃。这个测试根本不用,可以删除。

这会更好:

function  Trim_emo(SL: TStringList): TStringList;
var  
  I: Integer; 
  S: string;
begin 
  Result := TStringList.Create; 
  try
    for I := 0 to SL.Count-1 do
    begin
      S := Trim(ANSIUpperCase(SL[I]));      
      if S<>'' then
        Result.Add(S);
    end;
  except
    Result.Free;
    raise;
  end;
end;