Delphi 什么是代码页0?

Delphi 什么是代码页0?,delphi,unicode,character-encoding,delphi-2009,codepages,Delphi,Unicode,Character Encoding,Delphi 2009,Codepages,我正在使用Delphi函数 StringCodePage 我对COM函数返回的字符串(Acrobat注释getContents-请参阅我的其他文章)调用它,它返回0 什么是0?Ansi?代码页0是CP\U ACP,当前的Windows Ansi代码页 从Windows.pas: {$EXTERNALSYM CP_ACP} CP_ACP = 0; { default to ANSI code page } 发件人: CP_机场核心计划

我正在使用Delphi函数

StringCodePage
我对COM函数返回的字符串(Acrobat注释getContents-请参阅我的其他文章)调用它,它返回0


什么是0?Ansi?

代码页0是CP\U ACP,当前的Windows Ansi代码页

从Windows.pas:

{$EXTERNALSYM CP_ACP}
CP_ACP                   = 0;             { default to ANSI code page }
发件人:

CP_机场核心计划

当前系统显示Windows ANSI代码页。此值在不同的计算机上可能不同 计算机,甚至在同一网络上。它可以在同一台计算机上更改,从而导致 存储的数据变得无法恢复地损坏。此值仅用于临时设置 如有可能,应使用UTF-16或UTF-8进行使用和永久存储


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

知道您可以更改它(无需重新安装)也可能很有用:
StringCodePage()
可以返回0的唯一方法是,如果您将一个空白
AnsiString
传递给它,或者一个非空的
应答
,其有效负载中包含代码页0。Delphi对COM字符串使用
WideString
。在D2009中,RTL没有很好地将实际代码页值存储到
ansisting
payloads中,因此它通常具有0,因为这是编译时代码页相关性,而不是运行时相关性。这在以后的Delphi版本中得到了修复。您能将此作为答案发布吗?