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

Мне вспоминается, когда я впервые начал изучать программирование на языке Basic, и в какой-то момент я написал

if X=3 OR 4

Я намеревался сделать это так, как вы описываете, если X равен 3 или 4. Компилятор интерпретировал это как:

if (X=3) OR (4)

То есть, если X = 3 верно, или если 4 верно. Так как он определил все ненулевое значение как истинное, 4 - это истина, все ИЛИ ИСТИНА - это истина, и поэтому выражение всегда было истинным. Я потратил много времени на то, чтобы понять это.

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

7
задан Daniel Rikowski 10 July 2009 в 07:14
поделиться

3 ответа

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

int nCodePage = GetACP(); 

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

16
ответ дан 6 December 2019 в 10:53
поделиться

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;
2
ответ дан 6 December 2019 в 10:53
поделиться

У меня это сработало, спасибо, но можно записать более кратко:

UINT nCodePage = CP_ACP;
const int cch = ::GetLocaleInfo(LOCALE_SYSTEM_DEFAULT,
     LOCALE_RETURN_NUMBER|LOCALE_IDEFAULTANSICODEPAGE,
     (LPTSTR)&nCodePage, sizeof(nCodePage) / sizeof(_TCHAR) );
0
ответ дан 6 December 2019 в 10:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: