2009-02-09 6 views
4

Я использую функцию DelphiЧто такое Codepage 0?

StringCodePage 

я называю его на строки, возвращаемой функцией COM (Acrobat аннотаций getContents - см другие мои записи) и возвращает 0.

Что такое 0? Анси?

+1

Единственный способ, которым 'StringCodePage()' может возвращать 0, - это если вы передаете ему пустую 'AnsiString' или непустую' AnsiString' с кодовой страницей 0 в своей полезной нагрузке. Delphi использует 'WideString' для COM-строк. В D2009 RTL не выполнял очень хорошую работу по хранению фактических значений кодовой страницы в полезных данных AnsiString, поэтому он обычно имел 0, поскольку это сродство кодовой страницы компиляции, а не близость времени выполнения. Это было исправлено в более поздних версиях Delphi. –

+0

Не могли бы вы разместить это в качестве ответа? –

+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.

3

Единственный способ StringCodePage() может возвращать 0, если вы передаете в пустом AnsiString, таким образом, возвращая его во время компиляции сродства кодовой страницы, или проходите в непробельных AnsiString, который имеет кодовый 0 назначенные полезную нагрузку. Delphi использует WideString для COM-строк, а StringCodePage() не будет возвращать 0 для любого типа строк, кроме AnsiString. В D2009 RTL не очень хорошо справлялся с сохранением фактической кодовой страницы ОС в AnsiString, поэтому они обычно содержали сродство кодовой страницы компиляции до 0. Это функционально применительно к преобразованиям строк, но это не очень явным. Это было исправлено в более поздних версиях Delphi, так что AnsiString полезная нагрузка теперь содержит фактическую кодовую страницу ОС, которая определяется во время выполнения.