我正在使用Delphi函数
StringCodePage
我在COM函数返回的字符串上调用它(Acrobat Annotation getContents - 请参阅我的其他帖子)并返回0.
什么是0? ANSI?
答案 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代码页。