gpt4 book ai didi

delphi - 将 Hi-Ansi 字符转换为等效的 Ascii 字符 (é -> e)

转载 作者:行者123 更新时间:2023-12-03 14:34:08 26 4
gpt4 key购买 nike

Delphi 2007 中是否有一个例程可以根据区域设置(代码页)将 ANSI 表高位范围 (>127) 中的字符转换为纯 ASCII (<=127) 中的等效字符?

我知道有些字符不能很好地翻译,但大多数可以,尤其是。在 192-255 范围内:

  • ÀA
  • àa
  • ËE
  • ëe
  • ÇC
  • çc
  • (破折号)- (连字符 - 可能比较棘手)
  • (破折号)- (连字符)

最佳答案

WideCharToMultiByte对指定字符集不支持的任何字符进行最佳匹配映射,包括剥离变音符号。您可以通过使用它并传递 20127 (US-ASCII) 作为代码页来完全执行您想要的操作。

function BestFit(const AInput: AnsiString): AnsiString;
const
CodePage = 20127; //20127 = us-ascii
var
WS: WideString;
begin
WS := WideString(AInput);
SetLength(Result, WideCharToMultiByte(CodePage, 0, PWideChar(WS),
Length(WS), nil, 0, nil, nil));
WideCharToMultiByte(CodePage, 0, PWideChar(WS), Length(WS),
PAnsiChar(Result), Length(Result), nil, nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(BestFit('aÀàËëÇç–—€¢Š'));
end;

用你的例子调用它会产生你正在寻找的结果,包括 emdash-to-minus 情况,我认为 Jeroen 的建议不能处理这种情况,转换为规范化形式 D。如果你确实想采取这种方式方法,迈克尔卡普兰有一个blog post明确讨论了剥离变音符号(而不是一般的标准化),但它使用 C# 和 Vista 中引入的 API。您可以使用 FoldString api(任何 WinNT 版本)获得类似的东西。

当然,如果您只对一种字符集执行此操作,并且您希望避免与 WideString 之间的转换产生的开销,那么 Padu 是正确的,简单的 for 循环和查找表也同样有效。

关于delphi - 将 Hi-Ansi 字符转换为等效的 Ascii 字符 (é -> e),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1891196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com