gpt4 book ai didi

delphi - 使用 Unicode 字符串调用时 StrLComp 与 AnsiStrLComp

转载 作者:行者123 更新时间:2023-12-03 15:18:01 24 4
gpt4 key购买 nike

当使用 Unicode 字符串调用时,我对“Ansi”与“常规”rtl 字符串函数有些困惑。据我所知,在旧版本的 Delphi 下(当 Ansistring 是默认值时),“Ansi”版本处理多字节字符。在处理 Unicode 字符串时这有什么意义吗?假设我需要处理韩语字符,并且我的代码不必与旧的 Delphi 版本兼容,应该使用哪些 rtl 函数?

最佳答案

字符串比较函数的“Ansi”前缀实际上从未表示任何其他含义,只是在比较字符串时考虑了语言环境,而不是“仅”进行简单的二进制比较。在 Unicode 世界中,情况仍然如此。 Ansi* 系列函数还采用 (Unicode) 字符串作为参数,并在进行比较时考虑区域设置。

来自 AnsiCompareStr 文档 (D2009):

Most locales consider lowercase characters to be less than the corresponding uppercase characters. This is in contrast to ASCII order, in which lowercase characters are greater than uppercase characters. Thus, setting S1 to 'a' and S2 to 'A' causees AnsiCompareStr to return a value less than zero, while CompareStr, with the same arguments, returns a value greater than zero.

“考虑区域设置”的效果可能因区域设置而异。它可能与重音字符有关或无关。在 Unicode 版本中,它实际上可能会考虑字符的组成方式。例如,重音 e (é) 可以完全像这样编码,但也可以编码为两个单独的项目:重音和 e。

Ansi* 和“普通”字符串比较函数都包含在 SysUtils 单元中。它们都以字符串作为参数,在 Unicode Delphi 中,这确实意味着 UnicodeStrings。

如果您需要使用 AnsiStrings,那么您需要使用 AnsiStrings 单元。它具有相同的字符串比较函数集,但在本单元中它们都以 AnsiStrings 作为参数。

现在,如果您不需要与旧版本兼容:请使用 SysUtils 中的标准函数。如果字节比较足够,请使用普通的。如果您需要考虑区域设置,请使用 Ansi。

关于delphi - 使用 Unicode 字符串调用时 StrLComp 与 AnsiStrLComp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9504753/

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