Активная кодовая страница Windows - PullRequest
0 голосов
/ 13 сентября 2010

У меня есть определенная библиотека (IBM WebSphere MQ), которую я использую, с API, который должен возвращать набор символов удаленных серверов.

После некоторой отладки кажется, что возвращаемое значение этого вызова функции возвращает активную кодовую страницу моего компьютера.Я увидел это, посмотрев на возвращаемое значение вызова функции и результат выполнения chcp в командной строке - оба вернули 862. Когда я изменил язык в Панели управления-> Региональные и языковые параметры-> вкладка Дополнительночто-то еще, оба значения снова изменились, что подтвердило мое подозрение.

Мой вопрос: какое значение возвращает chcp?Какой Win32 API получает / устанавливает его?Как это связано с местами?(попытка изменить глобальный языковой стандарт в приложении C ++ с помощью std::locale::global, по-видимому, на это никак не повлияла).

Ответы [ 2 ]

2 голосов
/ 13 сентября 2010

CHCP возвращает кодовую страницу OEM (OEMCP). API - это Get / SetConsoleCP.

Вы можете установить языковой стандарт C ++ на ".OCP", чтобы соответствовать этому языковому стандарту.

0 голосов
/ 14 сентября 2010

Локали в основном идентифицируют языки, и, учитывая, что исторически не было так много кодовых страниц (алфавит многих языков не так сильно отличается от 26-Latin), несколько языков могут быть "сопоставлены" с одной и той же кодовой страницей.Насколько я помню, функция прямого разговора отсутствует, но я сделал это с помощью статистического подхода:

  • Для любой конкретной локали я собрал эти языки, которые я могу получить из системы (LOCALE_SMONTHNAME1 ..LOCALE_SMONTHNAME12, LOCALE_SNATIVELANGNAME и т. Д.) В Юникоде

  • Я вызвал функцию WideCharToMultiByte для каждой строки, пытаясь преобразовать их в однобайтовую кодировку этой кодовой страницы WideCharToMultiByte (CodePage, CP_AC_AR, CP_AC_SP или PDF)DefChar, @DefUsed);

    Если DefUsed был установлен во время процесса, это означало, что эти языки несовместимы с этой кодовой страницей.

...