什么是代码页0?

时间:2009-02-09 19:27:27

标签: delphi unicode character-encoding delphi-2009 codepages

我正在使用Delphi函数

StringCodePage

我在COM函数返回的字符串上调用它(Acrobat Annotation getContents - 请参阅我的其他帖子)并返回0.

什么是0? ANSI?

2 个答案:

答案 0 :(得分:8)

代码页0是CP_ACP,当前的Windows ANSI代码页。

来自Windows.pas:

{$EXTERNALSYM CP_ACP}
CP_ACP                   = 0;             { default to ANSI code page }

来自MSDN

  

CP_ACP

     

当前系统Windows ANSI代码页。这个值可以根据不同而不同   计算机,即使在同一个网络上。它可以在同一台计算机上更改,导致   存储的数据变得不可挽回地被破坏。此值仅用于临时值   如果可能,应使用UTF-16或UTF-8进行使用和永久存储。

答案 1 :(得分:3)

StringCodePage()返回0的唯一方法是传入空白AnsiString,从而返回其编译时代码页亲缘关系,或传入非空白AnsiString将代码页0分配给其有效负载。 Delphi对COM字符串使用WideString,对于除StringCodePage()之外的任何字符串类型,AnsiString都不会返回0。在D2009中,RTL没有很好地将OS的实际运行时代码页存储到AnsiString有效负载中,因此它们通常包含编译时代码页亲和性为0.这对于字符串转换是有效的,但不是很明确。这在后来的Delphi版本中得到修复,因此AnsiString有效负载现在包含在运行时确定的实际OS代码页。