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

前端之家收集整理的这篇文章主要介绍了Delphi – 将Hi-Ansi字符转换为Ascii等效(é – > e)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Delphi 2007中是否有可用于根据语言环境(代码页)将ANSI表(> 127)的高范围内的字符转换为纯ASCII(< = 127)中的等效数据的例程? 我知道一些字符不能很好的翻译,但大多数可以,尤其是。在192-255范围内:
>À→A
>à→a
Ë→E
ë→e
Ç→C
>ç→c
> – (en dash)→ – (连字号 – 可能会更棘手)
> – (em dash)→ – (连字符)

解决方法

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,PWideChar(WS),Length(WS),nil,nil));
  WideCharToMultiByte(CodePage,PAnsiChar(Result),Length(Result),nil);
end;

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

用你的例子来调用它会产生你正在寻找的结果,包括emdash-to-case,我不认为是由Jeroen的建议转换为Normalization表格D.如果你想采取这种方法,Michael Kaplan有一个blog post,它明确地讨论了剥离变音符号(而不是一般的标准化),但是它使用了C#和在Vista中引入的API。您可以使用FoldString api(任何WinNT版本)获得类似的东西。

当然,如果你只是为一个字符集做这个,而你想避免从WideString转换到开销,Padu是正确的,一个简单的for循环和一个查找表将是一样有效。

猜你在找的Delphi相关文章