Языковые стандарты и кодовые страницы

Идентификатор языкового стандарта определяет региональные параметры и язык для конкретной географической области. На определенном языке могут разговаривать в нескольких странах или областях; например, на португальском говорят и в Португалии, и в Бразилии. И наоборот, в одной стране или области могут говорить на нескольких официальных языках. Например, в Канаде два официальных языка: английский и французский. Таким образом, в Канаде два отдельных языковых стандарта: канадский английский и канадский французский. К некоторым категориям, зависящим от языкового стандарта, относится формат дат и отображения денежных значений.

Язык определяет соглашения по форматированию текста и даты, а страна или регион определяют национальные соглашения. Для каждого языка существует уникальное сопоставление, представленное кодовыми страницами, в которых содержатся символы, отличные от символов в алфавите (такие как знаки препинания и цифры). Кодовая страница — это набор символов, связанный с языком. А языковой стандарт — это уникальная комбинация языка, страны или региона и кодовой страницы. Параметры языкового стандарта и кодовой страницы можно изменить во время выполнения с помощью вызова функции setlocale.

Различные языки могут использовать разные кодовые страницы. Например, кодовая страница ANSI 1252 используется для английского и большинства европейских языков, а кодовая страница ANSI 932 используется для японского иероглифического языка. Виртуально все кодовые страницы разделяют один набор символов ASCII для первых 128 символов (от 0x00 до 0x7F).

Однобайтовую кодовую страницу можно представить в таблице (с 256 записями) как сопоставление байтовых значений с символами (включая цифры и знаки препинания) или глифами. Многобайтовую кодовую страницу также можно представить в виде очень большой таблицы (с 64000 записями) двухбайтовых значений, сопоставленных с символами. На практике, однако, она обычно представляется как таблица для первых 256 (однобайтовых) символов и как диапазоны для двухбайтовых значений.

Дополнительные сведения о кодовых страницах см. в разделе Кодовые страницы.

В библиотеке времени выполнения C есть два типа внутренних кодовых страниц: локальная и многобайтовая. Текущую кодовую страницу можно изменить во время выполнения программы (см. описание функций setlocale и _setmbcp). Также с помощью библиотеки времени выполнения можно получить и использовать значение кодовой страницы операционной системы. В Windows 2000 значение кодовой страницы операционной системы равно "system default ANSI". Эта кодовая страница не изменяется во время выполнения программы.

Когда изменяется кодовая страница языкового стандарта, поведение функций, зависящих от языкового стандарта, изменяется в соответствии с выбранной кодовой страницей. По умолчанию все функции, зависящие от языкового стандарта, начинают выполнение с кодовой страницей языкового стандарта, уникального для языкового стандарта "C". Внутреннюю кодовую страницу языкового стандарта (как и другие параметры языковых стандартов) можно изменить с помощью функции setlocale. Вызов функции setlocale(LC_ALL, "") устанавливает языковой стандарт, указанный пользователем в операционной системе.

Когда изменяется многобайтовая кодовая страница языкового стандарта, поведение многобайтовых функций изменяется в соответствии с выбранной кодовой страницей. По умолчанию все многобайтовые функции начинают выполнение с многобайтовой кодовой страницей языкового стандарта, соответствующей стандартной кодовой странице операционной системы. Внутреннюю многобайтовую кодовую страницу можно изменить с помощью функции _setmbcp.

Функция времени выполнения C setlocale устанавливает, изменяет или возвращает некоторые или все сведения об языковом стандарте текущей программы. Процедура _wsetlocale — это двухбайтовая версия функции setlocale; аргументы и возвращаемые значения функции _wsetlocale являются строками двухбайтовых символов.

См. также

Основные понятия

Юникод и многобайтовая кодировка

Преимущества переносимости кодировки