arrays - 更改数组Delphi中的特殊字符

标签 arrays delphi unicode normalization unicode-normalization

我得到的一些字符串是 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
);

关于arrays - 更改数组Delphi中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6599651/

相关文章:

c++ - 我如何在 C++ 中删除/插入数组的元素

Delphi - 当应用程序从 IDE 内运行时出现外部异常 C0000008

java - 如何在Java中读取Delphi记录结构

python - Numpy where 返回空数组

java - 使用for循环和字符串数组时出错

c++ - C++如何替换2D数组中的行和列?

delphi - 为什么有时 IDE 将类方法或字段标记为错误(红色下划线)

python - 如何使用python在unicode中转换像,"a³ a¡ a´a§"这样的字符?

java - Android/Java - 将转义控制字符转换为转义 Unicode 字符

python - 带重音符号的 Unicode 在日志记录时引发 UnicodeDecodeError (App Engine)