如何将带重音的Unicode字符串转换为不带重音的ANSI字符串?

时间:2019-02-23 14:33:02

标签: delphi

我发现这个WideStringToString() function可以将Unicode字符串转换为ANSI字符串。我需要将àèéìòù之类的字符串转换为aeeiou,因此应删除所有重音符号。我认为可以使用该功能完成操作,但是我应该使用哪个代码页?

1 个答案:

答案 0 :(得分:4)

当前执行此操作的方法是使用System.SysUtils.TEncoding。一个例子:

function RemoveAccents(const Src: string): string;
var
  Bytes: TBytes;
begin
  Bytes := TEncoding.ASCII.GetBytes(Src);
  Result := TEncoding.ASCII.GetString(Bytes);
end;

procedure Test;
begin
  Writeln(RemoveAccents('Ŧĥε qùíçķ ƀřǭŵņ fôx ǰűmpεď ōvêŗ ţħě łáƶÿ ďơǥ'));
  Writeln(RemoveAccents('àèéìòù'));
end;

由于某些未知的原因,这无法转换epsilon(ε),因此输出为:

Th? quick brown fox jump?d over the lazy dog
aeeiou