delphi - Delphi 2007 和 XE3 中的差分函数 Char/Chr

标签 delphi unicode char delphi-xe3 chr

我正在使用带有参数 130 的函数 Char 和 Chr,并且在 Delphi 2007 e XE3 中表现不同。

Delphi 2007:Char( 130 ) 或 Chr( 130 ) - 结果:逗号

Delphi XE3:Char( 130 ) 或 Chr( 130 ) - 结果:#$0082

我使用 AnsiChar( 130 ) 解决了问题。

我的问题是我在使用 AnsiChar 时是否遇到问题。我应该在整个项目中通过 AnsiChar 更改 Chr/Char 吗?

谢谢

最佳答案

这两个略有不同:

  • Char(130) 是一个 value typecast而不是函数调用。值为 130 的整数将转换为具有该序数的 Char
  • Chr(130) 确实是一个函数调用。它调用 intrinsic函数 Chr() .

在 Delphi 的前 Unicode 版本和后 Unicode 版本中,您可以互换使用 Char()Chr() 版本。但是,结果会因您使用的 Delphi 版本而异。

对于 pre-Unicode Delphi,Char 是一个 8 位 ANSI 字符。对于后 Unicode Delphi,Char 是 16 位 UTF-16 字符。

具体应如何解决此问题取决于您要实现的目标。如果您想把头埋在沙子里,并假装 Unicode 字符不存在,那么您可能想用 AnsiChar 替换所有对 Char 的使用。而且您还希望您的程序只在具有将字符 130 映射到该字符的语言环境的机器上运行。请注意,并非所有 Windows ANSI 语言环境都这样做。

但是,我怀疑无论问题是什么,解决问题的正确方法是采用 Unicode,并对该字符使用 UTF-16 编码。是SINGLE LOW-9 QUOTATION MARK U+201A .在 Unicode Delphi 中这样写:

Chr($201A)

或者像这样:

#$201A

或者像这样:

'‚'

另一方面,也许您确实需要逗号,注意 AnsiChar(130) 不是逗号,而是引号。

如果你想要一个逗号 ( COMMA U+002C ),那很简单:

Chr($002C)

#$002C

','

您需要阅读的一些内容:Delphi and Unicode by Marco Cantù .

关于delphi - Delphi 2007 和 XE3 中的差分函数 Char/Chr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19564785/

相关文章:

delphi - 使用 GetTypeKind 时如何触发编译时错误

android - Firemonkey:如何检测操作系统(Android/iOS)何时关闭

c++ - 将整数转换为字符数组函数

c - 在 C 中,字符如何工作

java - 如果存储的单词经常更改,那么使用字符数组或字符串是否更好?

delphi - Delphi组件的编程

unicode - 使用 Unicode 报告编译器错误消息行/列号

php - MySQL 中的 Unicode 字符在 PHP 和 ASP 中返回不同的字符代码值

python - 如何为正则表达式转义 unicode 字符串?

delphi - tcxDateEdit 编辑消息错误