Что такое кодовая страница 0? - PullRequest
4 голосов
/ 09 февраля 2009

Я использую функцию Delphi

StringCodePage

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

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

Ответы [ 2 ]

8 голосов
/ 09 февраля 2009

Кодовая страница 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 голосов
/ 06 июля 2012

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

...