2

我正在使用带有参数 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 吗?

谢谢

4

1 回答 1

7

这两个略有不同:

  • Char(130) 是值类型转换而不是函数调用。具有值的整数130将转换为Char具有该序数的 a。
  • Chr(130) 确实是一个函数调用。它调用内部函数Chr()

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

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

你应该如何解决这个问题取决于你想要达到的目标。如果你想埋头苦干,假装 Unicode 字符不存在,那么也许你想CharAnsiChar. 而且您还希望您的程序仅在具有将字符 130 映射到该字符的语言环境的机器上运行。请注意,并非所有 Windows ANSI 语言环境都这样做。

但是,我怀疑无论是什么问题,正确的解决方案都是采用 Unicode,并为该字符使用 UTF-16 编码。它是单低 9 引号 U+201A。在 Unicode Delphi 中这样写:

Chr($201A)

或像这样:

#$201A

或像这样:

'‚'

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

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

Chr($002C)

或者

#$002C

或者

','

您需要阅读:Marco Cantù 的 Delphi 和 Unicode

于 2013-10-24T11:42:31.073 回答