数组 – 更改数组Delphi中的特殊字符

我得到的一些字符串是UTF-8编码,并包含一些特殊字符,如
Å¡,Ä’,Ä等.我使用StringReplace()将其转换为一些普通文本,但我只能转换一种类型的字符.因为 PHP还有一个替换字符串的功能,如下所示: how to replace special characters with the ones they’re based on in PHP?,但它支持数组:
<?PHP
  $vOriginalString = "¿Dónde está el niño que vive aquí? En el témpano o en el iglú. ÁFRICA,MÉXICO,ÍNDICE,CANCIÓN y NÚMERO.";

  $vSomeSpecialChars = array("á","é","í","ó","ú","Á","É","Í","Ó","Ú","ñ","Ñ");
  $vReplacementChars = array("a","e","i","o","u","A","E","I","O","U","n","N");

  $vReplacedString = str_replace($vSomeSpecialChars,$vReplacementChars,$vOriginalString);

  echo $vReplacedString; // outputs '¿Donde esta el nino que vive aqui? En el tempano o en el iglu. AFRICA,MEXICO,INDICE,CANCION y NUMERO.'
?>

我怎么能在Delphi中这样做? StringReplace不支持数组.

解决方法

function str_replace(const oldChars,newChars: array of Char; const str: string): string;
var
  i: Integer;
begin
  Assert(Length(oldChars)=Length(newChars));
  Result := str;
  for i := 0 to high(oldChars) do
    Result := StringReplace(Result,oldChars[i],newChars[i],[rfReplaceAll])
end;

如果您担心StringReplace引起的所有不必要的堆分配,那么您可以这样写:

function str_replace(const oldChars,newChars: array of Char; const str: string): string;
var
  i,j: Integer;
begin
  Assert(Length(oldChars)=Length(newChars));
  Result := str;
  for i := 1 to Length(Result) do
    for j := 0 to high(oldChars) do
      if Result[i]=oldChars[j] then
      begin
        Result[i] := newChars[j];
        break;
      end;
end;

像这样称呼它:

newStr := str_replace(
  ['á','é','í'],['a','e','i'],oldStr
);

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...