Как программно определить текущую кодовую страницу Windows по умолчанию? - PullRequest
7 голосов
/ 26 мая 2009

Мне нужно преобразовать кодировку строкового вывода приложения VB6 в определенную кодировку.

Проблема в том, что я не знаю кодировку строки, из-за этого:

В соответствии с документацией VB6 при доступе к определенным функциям API внутренние строки Unicode преобразуются в строки ANSI с использованием кодовой страницы по умолчанию *1007* Windows.

Из-за этого кодировка вывода строки может быть разной в разных системах, но я должен знать это для выполнения преобразования.

Как я могу прочитать кодовую страницу по умолчанию с помощью Win32 API или - если нет другого пути - путем чтения реестра?

Ответы [ 3 ]

14 голосов
/ 28 мая 2009

Это может быть еще более кратким, если использовать GetACP - вызов Win32 API для возврата кодовой страницы по умолчанию! (Кодовая страница по умолчанию часто называется «ANSI»)

int nCodePage = GetACP(); 

Также многие вызовы API (например, MultiByteToWideChar) принимают постоянное значение CP_ACP (ноль), которое всегда означает «использовать системную кодовую страницу» . Поэтому вам может не понадобиться знать текущую кодовую страницу, в зависимости от того, что вы хотите с ней сделать.

1 голос
/ 26 мая 2009

GetSystemDefaultLCID () предоставляет системный языковой стандарт.

Если LCID недостаточно, и вам действительно нужна кодовая страница, используйте этот код:

  TCHAR szCodePage[10];
  int cch= GetLocaleInfo(
    GetSystemDefaultLCID(), // or any LCID you may be interested in
    LOCALE_IDEFAULTANSICODEPAGE, 
    szCodePage, 
    countof(szCodePage));

  nCodePage= cch>0 ? _ttoi(szCodePage) : 0;
0 голосов
/ 28 мая 2009

Это сработало для меня, спасибо, но можно написать более кратко, как:

UINT nCodePage = CP_ACP;
const int cch = ::GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,
     LOCALE_RETURN_NUMBER|LOCALE_IDEFAULTANSICODEPAGE,
     (LPTSTR)&nCodePage, sizeof(nCodePage) / sizeof(_TCHAR) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...