Delphi 2007和XE3中的差异函数Char / Chr

时间:2013-10-24 11:34:22

标签: 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吗?

由于

1 个答案:

答案 0 :(得分:7)

这两者略有不同:

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

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

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

您应该如何解决这个问题取决于您要实现的目标。如果你想把头埋在沙子里,并假装不存在Unicode字符,那么你可能想要用Char替换AnsiChar的所有用法。而且您还希望您的程序只能在具有将字符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ù