我使用带有参数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吗?
由于
答案 0 :(得分:7)
这两者略有不同:
130
的整数将使用该序数转换为Char
。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ù。