什么是代码页 0?
我正在使用 Delphi 函数,
StringCodePage
我在 COM 函数返回的字符串上调用它(Acrobat Annotation getContents - 请参阅我的其他帖子),它返回 0。0
是什么? 安西?
I'm using the Delphi function
StringCodePage
I call it on a string returned by a COM function (Acrobat Annotation getContents - see my other posts) and it returns 0.
What is 0? Ansi?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
代码页 0 是 CP_ACP,当前的 Windows ANSI 代码页。
来自 Windows.pas:
来自 MSDN:
Code page 0 is CP_ACP, current Windows ANSI code page.
From Windows.pas:
From MSDN:
StringCodePage()
返回 0 的唯一方法是,如果您传入空白AnsiString
,从而返回其编译时代码页亲和性,或者传入非空白AnsiString
已将代码页 0 分配给其负载。 Delphi 对 COM 字符串使用WideString
,并且对于除纯AnsiString
之外的任何字符串类型,StringCodePage()
都不会返回 0。 在 D2009 中,RTL 没有很好地将操作系统的实际运行时代码页存储到AnsiString
有效负载中,因此它们通常包含编译时代码页关联性 0。这是功能性的到字符串转换,但不是很明确。 这个问题在更高版本的 Delphi 中得到了修复,因此AnsiString
有效负载现在包含在运行时确定的实际操作系统代码页。The only way
StringCodePage()
can return 0 is if you are passing in a blankAnsiString
, thus returning its compile-time codepage affinity, or are passing in a non-blankAnsiString
that has codepage 0 assigned to its payload. Delphi usesWideString
for COM strings, andStringCodePage()
will not return 0 for any string type except plainAnsiString
. In D2009, the RTL did not do a very good job of storing the OS's actual run-time codepage intoAnsiString
payloads, so they commonly contained the compile-time codepage affinity of 0. That is functional in regards to string conversions, but it not very explicit. That was fixed in later Delphi versions soAnsiString
payloads now contain the actual OS codepage that is determined at run-time.