gpt4 book ai didi

delphi - 确定字符是否可打印

转载 作者:行者123 更新时间:2023-12-03 15:54:38 31 4
gpt4 key购买 nike

我想开发一个十六进制转储 View ,但遇到当前事件 ANSI 代码页 (CP_ACP) 中不可打印的字符问题。我如何检测它们并打印一个点?

我的函数目前如下所示:

function HexChar(j: byte): AnsiChar;
begin
if j < $20 then result := '.'

// Dirty workaround which only supports the undefined characters of Windows-1252
else if (GetACP=1252) and ((j=$81) or (j=$8D) or (j=$8F) or (j=$90) or (j=$9D)) then result := '.'

else result := AnsiChar(j);
end;

使用 Delphi XE4 和 Courier New 字体,字符 $81、$8D、$8F、$90、$9D 是不可见的。 GetACP 返回 1252,因此我使用的是 Windows-1252 。根据Wikipedia ,我发现的范围在 Windows-1252 中没有定义。如何检查序数值为 j 的字符是否在当前事件代码页中定义?

最佳答案

调用GetStringTypeW支持详细的字符分类功能。

也可以使用 GetStringTypeEx或已弃用 GetStringTypeA函数,但根据 MSDN,两者都只是调用 GetStringTypeW。此外,GetStringTypeEx 隐藏了 ANSI 和 Unicode 版本之间的差异,并被 MSDN 推荐用于字符类型检索。

另一种可能性是使用 TCharacter.GetUnicodeCategory()方法来自 character.pas .

关于delphi - 确定字符是否可打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24385818/

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