【问题标题】:Difference function Char / Chr in Delphi 2007 and XE3Delphi 2007 和 XE3 中的差分函数 Char / Chr
【发布时间】:2013-10-24 11:34:21
【问题描述】:

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

谢谢

【问题讨论】:

  • 这取决于你实际做什么。在大多数情况下,我建议采用 Unicode。顺便说一句,如果您使用的是 Windows-1252,Chr(130) 不是逗号(“,”U+002C:COMMA),而是“‚”(U+201A:单低 9 引号)。这是两个完全不同的东西,无论是在语义上还是(在大多数字体中)视觉上!
  • 关于更新:不,在 Windows 1252 中,chr(130) 不是逗号!一点也不!

标签: delphi unicode char delphi-xe3 chr


【解决方案1】:

这两个略有不同:

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

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

对于 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ù

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 2016-11-02
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多