Языковые стандарты и кодовые страницы
Идентификатор языкового стандарта отражает локальные соглашения и язык для определенного географического региона. Заданный язык может говориться в нескольких странах или регионах; например, португальский говорится в Бразилии, а также в Португалии. И наоборот, в стране или регионе может быть несколько официальных языков. Например, Канада имеет два языка: английский и французский. Таким образом, Канада имеет два разных языковых стандарта: канадский-английский и канадский-французский. К некоторым категориям, зависящим от языкового стандарта, относится формат дат и отображения денежных значений.
Язык определяет соглашения о форматировании текста и данных, а страна или регион определяют локальные соглашения. Каждый язык имеет уникальное сопоставление, представленное кодовых страниц, которое включает символы, отличные от символов в алфавите (например, знаки препинания и числа). Кодовая страница — это набор символов, связанный с языком. Таким образом, языковой стандарт — это уникальное сочетание языка, страны или региона и кодовой страницы. Языковой стандарт и параметр кодовой страницы можно изменить во время выполнения, вызвав функцию setlocale .
Разные языки могут использовать разные кодовые страницы. Например, кодовая страница ANSI 1252 используется для английского и большинства европейских языков, а кодовая страница ANSI 932 используется для японского Канджи. Практически все кодовые страницы используют набор символов ASCII для самых низких 128 символов (0x00 до 0x7F).
Любая кодовая страница с одним байтом может быть представлена в таблице (с 256 записями) в виде сопоставления значений байтов с символами (включая числа и знаки препинания) или глифы. Любая многобайтовая кодовая страница также может быть представлена в виде очень большой таблицы (с записями 64K) двухбайтовых значений для символов. На практике обычно это таблица для первых 256 (однобайтовых) символов и в виде диапазонов для двухбайтовых значений.
Дополнительные сведения о кодовых страницах см. в разделе Code Pages.
Библиотека времени выполнения C имеет два типа внутренних кодовых страниц: языковой стандарт и многобайтовый стандарт. Вы можете изменить текущую кодовую страницу во время выполнения программы (см. документацию для функций setlocale и _setmbcp ). Кроме того, библиотека времени выполнения может получить и использовать значение кодовой страницы операционной системы, которая является константой в течение срока выполнения программы.
При изменении кодовой страницы языкового стандарта поведение зависимого от языкового стандарта набора функций изменяется на ту, которая определяется выбранной кодовой страницей. По умолчанию все зависимые от языкового стандарта функции начинают выполняться с кодовой страницы языкового стандарта, уникальной для языкового стандарта C. Вы можете изменить внутреннюю кодовую страницу языкового стандарта (а также другие свойства языкового стандарта), вызвав функцию setlocale
. Вызов setlocale
(LC_ALL, "") задает языковой стандарт, указанный языковым стандартом операционной системы.
Аналогичным образом при изменении многобайтовой кодовой страницы поведение многобайтовых функций изменяется на ту, которая определяется выбранной кодовой страницей. По умолчанию все многобайтовые функции начинают выполняться с многобайтовой кодовой страницы, соответствующей кодовой странице операционной системы по умолчанию. Вы можете изменить внутреннюю кодовую страницу с несколькимибайтами, вызвав функцию _setmbcp
.
Функция времени setlocale
выполнения C задает, изменяет или запрашивает некоторые или все сведения о языковом стандарте текущей программы. Подпрограмма _wsetlocale — это широкозначная версия setlocale
; аргументы и возвращаемые значения _wsetlocale
являются строками с широкими символами.
См. также
Юникод и многобайтовая кодировка
Преимущества переносимости кодировки