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

Delphi 如何将带重音的Unicode字符串转换为不带重音的ANSI字符串?,delphi,Delphi,我发现这可以将Unicode字符串转换为ANSI字符串。我需要将类似于的字符串转换为aeeiou,因此所有重音都应该删除。我认为可以用这个函数来完成,但是我应该使用哪个代码页呢?当前的方法是使用。例如: 函数RemoveAccents(const Src:string):string; 变量 字节:TBytes; 开始 字节:=TEncoding.ASCII.GetBytes(Src); 结果:=TEncoding.ASCII.GetString(字节); 终止 程序测试; 开始 Writeln

我发现这可以将Unicode字符串转换为ANSI字符串。我需要将类似于
的字符串转换为
aeeiou
,因此所有重音都应该删除。我认为可以用这个函数来完成,但是我应该使用哪个代码页呢?

当前的方法是使用。例如:

函数RemoveAccents(const Src:string):string;
变量
字节:TBytes;
开始
字节:=TEncoding.ASCII.GetBytes(Src);
结果:=TEncoding.ASCII.GetString(字节);
终止
程序测试;
开始
Writeln(RemoveAccents('Ŧĥεqùíķƀřǭŵņfùx ǰmpεďvŗ355ħěłƶÿďơǥ');
书面形式(删除附件('aèèùù');
终止
由于未知原因,无法转换ε(ε),因此输出为:

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

您也许可以将TEncoding.Unicode转换为TEncoding.ASCII。后者绝对不会包含任何口音。有关@RudyVelthuis的帮助,请参阅,但重音可能会转换为
,而不是ASCII对应项
TEncoding
中关于执行的不好transliteration@Remy:它似乎适用于我下面示例代码中的重音。但显然不是像epsilon这样的外来角色。当然,这不是谷歌翻译。也许这会有所帮助:@UliGerhardt:注意,被接受的答案使用了WideCharToMultiByte,这也是TenCodeding(在Windows上)所使用的。我用NormalizeString进行了测试,但它也不规范ε。我看了看它是否是预期的,但从那张图表中我什么也看不懂。@Sertac:我想它说ε永远不会合成,也就是说,总是一个单值码点。但是,其中一些看起来像一个ε,所以它是相当混乱的。非常感谢你的建议!Epsilon不会出现在我的数据中,因此这是一个合适的解决方案!