что такое кодовая страница
Кодовые страницы
Большинство приложений, написанных сегодня, обрабатывали символьные данные в основном как Юникод, используя кодировку UTF-16. Однако многие устаревшие приложения по прежнему используют наборы символов, основанные на кодовых страницах. Даже новым приложениям иногда приходится работать с кодовыми страницами, часто по одной из следующих причин:
Каждая кодовая страница представлена идентификатором кодовой страницы, например 1252, и обрабатывается функциями API, поддерживающими Юникод и кодировка символов. Список поддерживаемых идентификаторов кодовых страниц см. в разделе идентификаторы кодовых страниц. В справочнике по кодовым страницам в центре разработчиков Microsoft Go Global содержатся полные описания многих кодовых страниц.
Windows кодовые страницы, обычно называемые «кодовыми страницами ANSI», — кодовые страницы, для которых значения, отличные от ASCII (значения больше 127), представляют международные символы. эти кодовые страницы используются изначально в Windows Me, а также доступны в Windows NT и более поздних версиях.
первоначально Windows кодовая страница 1252, кодовая страница, обычно используемая для английского и других европейских языков, основана на черновике Американский национальный институт стандартов (ANSI) (ANSI). этот черновик в конечном итоге стал стандартом iso 8859-1, но Windows кодовая страница 1252 была реализована до того, как стандарт стал окончательным и не совпадает с ISO 8859-1.
многие функции API Windows имеют версии «A» (ANSI) и «W» (широкие возможности юникода). версия «A» обрабатывает текст на основе кодовых страниц Windows, а версия «W» обрабатывает текст в юникоде. см. Windows типы данных для строк и соглашений для прототипов функций.
Windows кодовые страницы также иногда называются «активными кодовыми страницами» или «системными активными кодовыми страницами». Windows операционная система всегда имеет одну активную в настоящий момент Windows кодовую страницу. Все версии функций API в ANSI используют текущую активную кодовую страницу.
Кодовые страницы изготовителя оборудования (OEM) — это кодовые страницы, для которых значения, отличные от ASCII, представляют символы рисования строк и пунктуации. Эти кодовые страницы изначально использовались для MS-DOS и по-прежнему используются для консольных приложений. Они также используются для нерасширенных имен файлов в файловых системах FAT12, FAT16 и FAT32, как описано в разделе наборы символов, используемые в именах файлов. Обычно кодовая страница OEM для английского языка — кодовая страница 437.
для Windows кодовых страниц и кодовых страниц OEM значения кода 0x00 до 0x7f соответствуют 7-разрядной кодировке ASCII. Значения кода 0x00 до 0x19 и 0x7F всегда представляют стандартизированные управляющие символы, а 0x20 – 0x7E — стандартизированные отображаемые символы. Символы, представленные оставшимися кодами, от 0x80 до 0xFF, зависят от наборов символов. Каждый набор символов содержит различные специальные символы, обычно настроенные для языка или группы языков. Windows кодовая страница 1252 и OEM кодовая страница 437 обычно используются в США.
в дополнение к Windows и кодовым страницам OEM приложения могут использовать немашинные кодовые страницы. Примерами являются кодовые страницы EBCDIC и Macintosh.
Две кодировки Юникода (UTF-7 и UTF-8) реализуются как кодовые страницы. Как и в случае с другими кодовыми страницами, каждая страница известна числовым идентификатором и может обрабатываться множеством одинаковых функций API Юникода и кодировки символов.
Кодовые страницы могут быть страницами однобайтовой кодировки (SBCS) или двухбайтовой кодировкой (DBCS). На страницах SBCS каждый байт кодирует один символ напрямую, чтобы можно было представить ровно 256 различных символов (включая управляющие символы, буквы, цифры, знаки препинания, символы и т. д.). Кодовые страницы DBCS используются для таких языков, как японский и китайский. В такой кодовой странице некоторые символы имеют две байтовые кодировки с определенными байтами (всегда значения больше 127), служащие «старшими байтами». Вместо кодирования символов в своих собственных значениях старшие байты могут быть сопоставлены с символом только в сочетании с «младшим байтом».
Для некоторых устаревших протоколов требуется использовать однобайтовые и ДВУХБАЙТОВЫЕ кодовые страницы. Каждая кодовая страница SBCS и DBCS поддерживает разные символы, но ни одна кодовая страница не поддерживает полный набор символов, предоставляемых в Юникоде. Каждая кодовая страница SBCS/DBCS поддерживает разные подмножества, которые кодируются по-разному.
Данные, преобразованные из одной однобайтовой или ДВУХБАЙТОВОЙ кодовой страницы в другую, могут быть повреждены, так как одно и то же значение данных на разных кодовых страницах может кодировать другой символ. Данные, преобразованные из Юникода в SBCS или DBCS, подвергаются потери данных, так как данная кодовая страница может не представлять каждый символ, используемый в определенных данных в Юникоде.
В дополнение к кодовым страницам SBCS и DBCS в приложениях доступны кодовые страницы набора многобайтовых наборов символов 52936, 54936, 51949 и 5022x, которые используют такой же подход, как и для DBCS. Однако многобайтовая кодовая страница набора символов выходит за пределы двухбайтовых кодировок некоторых символов. UTF-7 и UTF-8 используют аналогичный подход для кодирования Юникода, основанный на 7-и 8-разрядных байтах соответственно. Дополнительные сведения см. в статье Юникод.
Несколько функций Юникода и наборов символов позволяют приложениям работать с кодовыми страницами. Приложение может использовать функции жеткпинфо и жеткпинфоекс для получения сведений о кодовой странице. Эти сведения включают символ по умолчанию, используемый, когда символ в преобразованной строке не имеет соответствующей записи в кодовой странице.
приложение может использовать функции MultiByteToWideChar и WideCharToMultiByte для преобразования между строками на основе кодовых страниц Windows и строк юникода. Хотя их имена ссылаются на «многобайтовый», эти функции хорошо подходят для однобайтовых кодовых страниц, DBCS и многобайтовых наборов символов.
WideCharToMultiByte может потерять некоторые данные, если переданная кодовая страница не может представлять все символы в строке Юникода.
приложение может выполнять преобразование между Windows кодовыми страницами и кодовыми страницами OEM с помощью стандартных функций библиотеки времени выполнения C. Однако использование этих функций представляет риск потери данных, поскольку символы, которые могут быть представлены каждой кодовой страницей, не совпадают.
Кодовые страницы
Кодовая страница — это набор символов, который может содержать числа, знаки пунктуации и другие глифы. Различные языки и языковые стандарты могут использовать разные кодовые страницы. Например, кодовая страница ANSI 1252 используется для английского и большинства европейских языков; кодовая страница OEM 932 используется для японского иероглифического письма Кандзи.
Кодовую страницу можно представить в таблице в виде сопоставления символов с однобайтовыми или многобайтными значениями. Многие кодовые страницы включают в себя набор символов ASCII для символов в диапазоне 0x00–0x7F.
В библиотеке времени выполнения Майкрософт используются следующие типы кодовых страниц:
Системная кодовая страница ANSI по умолчанию. По умолчанию при запуске система среды выполнения автоматически устанавливает многобайтовую кодовую страницу в системную кодовую страницу ANSI по умолчанию, которая получается из операционной системы. Вызов
также устанавливает для языкового стандарта системную кодовую страницу ANSI по умолчанию.
Кодовая страница языкового стандарта. Поведение ряда подпрограмм времени выполнения зависит от текущей настройки языкового стандарта, которая включает в себя кодовую страницу языкового стандарта. (Дополнительные сведения см. в разделе подпрограммы, зависящие от языкового стандарта.) По умолчанию все подпрограммы, зависящие от языковых стандартов в библиотеке времени выполнения Microsoft, используют кодовую страницу, соответствующую языковому стандарту «C». Во время выполнения можно изменить или запросить кодовую страницу языкового стандарта, используемую с помощью вызова setlocale.
Многобайтовая кодовая страница. Поведение большинства подпрограмм библиотеки времени выполнения, работающих с многобайтовыми символами, зависит от текущей настройки многобайтовой кодовой страницы. По умолчанию эти подпрограммы используют системную кодовую страницу ANSI по умолчанию. Во время выполнения можно запросить или изменить многобайтовую кодовую страницу с помощью функций _getmbcp и _setmbcp соответственно.
Языковой стандарт «C» определен ANSI для обеспечения соответствия языковому стандарту, с которым обычно выполнялись программы C. Кодовая страница для языкового стандарта «C» (кодовая страница «C») соответствует кодировке ASCII. Например, в языковом стандарте «C» функция islower возвращает значение true только для значений 0x61–0x7A. В другом языковом стандарте true для этих и других значений, как определено в этом языковом стандарте, может возвращаться значение нижнего уровня.
О кодировках и кодовых страницах
Вряд ли это сейчас сильно актуально, но может кому-то покажется интересным (или просто вспомнит былые годы).
Начну с небольшого экскурса в историю компьютера. Поскольку компьютер использовался для обработки информации, то он просто обязан представлять эту информацию в «человеческом» виде. Компьютер хранит информацию в виде чисел (байтов), а человек воспринимает символы (буквы, цифры, различные знаки). Значит, надо сделать сопоставление число символ и задача будет решена. Сначала посчитаем, сколько символов нам надо (не забудем, что «мы» — американцы, использующие латинский алфавит). Нам надо 10 цифр + 26 заглавных букв английского алфавита + 26 строчных букв + математические знаки (хотя бы +-/*=> + можно определить соответствующий ей код в Unicode (сейчас в кодовых страницах для каждого 8-битного кода показывается 16-битный код Unicode) и потом при необходимости вывести этот символ для любой кодовой страницы, где он присутствует. В настоящее время проблема кодировок и перекодировок для пользователей практически исчезла, но все же изредка приходят письма, где либо тема письма либо содержание «не в той» кодировке.
Интересно, что примерно год назад проблема кодировок ненадолго всплыла при «наезде» ФАС на сотовых операторов, мол те дискриминируют русскоязычных пользователей, поскольку за передачу кириллицы берут больше. Это объясняется техническим решением, выбранным разработчиком протокола SMS связи. Если бы его россияне разработали, они бы, возможно, отдали приоритет кириллице. В указанной статье «начальник управления контроля транспорта и связи Дмитрий Рутенберг отметил, что существуют и восьмибитные кодировки для кириллицы, которые могли бы использовать операторы.» Во как — на улице 21-й век, Unicode шагает по миру, а господин Рутенберг тянет нас в начало 90-х, когда шла «война кодировок» и проблема перекодировок стояла во весь рост. Интересно, в какой кодировке должен получить СМС Вася Пупкин, пользующийся финским телефоном, находящийся в Турции на отдыхе, от жены с корейским телефоном, отправляющей СМС из Казахстана? А от своего французского компаньона (с японским телефоном), находящегося в Испании? Думаю, никакой начальник ответа на этот вопрос дать не сможет. К счастью, это «экономное» предложение не воплотилось в жизнь.
Юный читатель может спросить — а что помешало сразу использовать Unicode, зачем были придуманы эти заморочки с кодовыми страницами? Думаю, дело в финансовой стороне проблемы. Unicode требует в 2 раза больше памяти, а память стоит денег (и дисковая и ОЗУ). Стал бы американец покупать компьютер на 1-2 тыс дороже из-за того, что «теперь новая ОС требует больше памяти, но позволяет без проблем работать с русским, европейскими, арабскими языками»? Боюсь, простой англоязычный покупатель воспринял бы такой аргумент «неадекватно» (и обратился бы к другим производителям).
Кодирование символов
Кодировка символов (часто называемая также кодовой страницей ) – это набор числовых значений, которые ставятся в соответствие группе алфавитно-цифровых символов, знаков пунктуации и специальных символов.
Для кодировки символов в Windows используется таблица ASCII (American Standard Code for Interchange of Information).
В ASCII первые 128 символов всех кодовых страниц состоят из базовой таблицы символов. Первые 32 кода базовой таблицы, начиная с нулевого, размещают управляющие коды.
Символ | Код | Клавиши | Значение |
nul | 0 | Ctrl + @ | Нуль |
soh | 1 | Ctrl + A | Начало заголовка |
stx | 2 | Ctrl + B | Начало текста |
etx | 3 | Ctrl + C | Конец текста |
eot | 4 | Ctrl + D | Конец передачи |
enq | 5 | Ctrl + E | Запрос |
ack | 6 | Ctrl + F | Подтверждение |
bel | 7 | Ctrl + G | Сигнал (звонок) |
bs | 8 | Ctrl + H | Забой (шаг назад) |
ht | 9 | Ctrl + I | Горизонтальная табуляция |
lf | 10 | Ctrl + J | Перевод строки |
vt | 11 | Ctrl + K | Вертикальная табуляция |
ff | 12 | Ctrl + L | Новая страница |
cr | 13 | Ctrl + M | Возврат каретки |
so | 14 | Ctrl + N | Выключить сдвиг |
si | 15 | Ctrl + O | Включить сдвиг |
dle | 16 | Ctrl + P | Ключ связи данных |
dc1 | 17 | Ctrl + Q | Управление устройством 1 |
dc2 | 18 | Ctrl + R | Управление устройством 2 |
dc3 | 19 | Ctrl + S | Управление устройством 3 |
dc4 | 20 | Ctrl + T | Управление устройством 4 |
nak | 21 | Ctrl + U | Отрицательное подтверждение |
syn | 22 | Ctrl + V | Синхронизация |
etb | 23 | Ctrl + W | Конец передаваемого блока |
can | 24 | Ctrl + X | Отказ |
em | 25 | Ctrl + Y | Конец среды |
sub | 26 | Ctrl + Z | Замена |
esc | 27 | Ctrl + [ | Ключ |
fs | 28 | Ctrl + \ | Разделитель файлов |
gs | 29 | Ctrl + ] | Разделитель группы |
rs | 30 | Ctrl + ^ | Разделитель записей |
us | 31 | Ctrl + _ | Разделитель модулей |
Базовая таблица кодировки ASCII
Символы с номерами от 128 до 255 представляют собой таблицу расширения и варьируются в зависимости от набора скриптов, представленных кодировкой символов. Набор символов таблицы расширения различается в зависимости от выбранной кодовой страницы:
1251 – кодовая страница Windows
128 Ђ | 144 Ђ | 160 | 176 ° | 192 А | 208 Р | 224 а | 240 р |
129 Ѓ | 145 ‘ | 161 Ў | 177 ± | 193 Б | 209 С | 225 б | 241 с |
130 ‚ | 146 ’ | 162 ў | 178 I | 194 В | 210 Т | 226 в | 242 т |
131 ѓ | 147 “ | 163 J | 179 i | 195 Г | 211 У | 227 г | 243 у |
132 „ | 148 ” | 164 ¤ | 180 ґ | 196 Д | 212 Ф | 228 д | 244 ф |
133 … | 149 • | 165 Ґ | 181 μ | 197 Е | 213 Х | 229 е | 245 х |
134 † | 150 – | 166 ¦ | 182 ¶ | 198 Ж | 214 Ц | 230 ж | 246 ц |
135 ‡ | 151 — | 167 § | 183 · | 199 З | 215 Ч | 231 з | 247 ч |
136 € | 152 □ | 168 Ё | 184 ё | 200 И | 216 Ш | 232 и | 248 ш |
137 ‰ | 153 ™ | 169 © | 185 № | 201 Й | 217 Щ | 233 й | 249 щ |
138 Љ | 154 љ | 170 Є | 186 є | 202 К | 218 Ъ | 234 к | 250 ъ |
139 | 171 « | 187 » | 203 Л | 219 Ы | 235 л | 251 ы | |
140 Њ | 156 њ | 172 ¬ | 188 j | 204 М | 220 Ь | 236 м | 252 ь |
141 Ќ | 157 ќ | 173 | 189 S | 205 Н | 221 Э | 237 н | 253 э |
142 Ћ | 158 ћ | 174 ® | 190 s | 206 О | 222 Ю | 238 о | 254 ю |
143 Џ | 159 џ | 175 Ï | 191 ї | 207 П | 223 Я | 239 п | 255 я |
866 – кодовая страница DOS
128 А | 144 Р | 160 а | 176 ░ | 192 └ | 208 ╨ | 224 р | 240 ≡Ё |
129 Б | 145 С | 161 б | 177 ▒ | 193 ┴ | 209 ╤ | 225 с | 241 ±ё |
130 В | 146 Т | 162 в | 178 ▓ | 194 ┬ | 210 ╥ | 226 т | 242 ≥ |
131 Г | 147 У | 163 г | 179 │ | 195 ├ | 211 ╙ | 227 у | 243 ≤ |
132 Д | 148 Ф | 164 д | 180 ┤ | 196 ─ | 212 ╘ | 228 ф | 244 ⌠ |
133 Е | 149 Х | 165 е | 181 ╡ | 197 ┼ | 213 ╒ | 229 х | 245 ⌡ |
134 Ж | 150 Ц | 166 ж | 182 ╢ | 198 ╞ | 214 ╓ | 230 ц | 246 ¸ |
135 З | 151 Ч | 167 з | 183 ╖ | 199 ╟ | 215 ╫ | 231 ч | 247 » |
136 И | 152 Ш | 168 и | 184 ╕ | 200 ╚ | 216 ╪ | 232 ш | 248 ° |
137 Й | 153 Щ | 169 й | 185 ╣ | 201 ╔ | 217 ┘ | 233 щ | 249 · |
138 К | 154 Ъ | 170 к | 186 ║ | 202 ╩ | 218 ┌ | 234 ъ | 250 ∙ |
139 Л | 155 Ы | 171 л | 187 ╗ | 203 ╦ | 219 █ | 235 ы | 251 √ |
140 М | 156 Ь | 172 м | 188 ╝ | 204 ╠ | 220 ▄ | 236 ь | 252 ⁿ |
141 Н | 157 Э | 173 н | 189 ╜ | 205 ═ | 221 ▌ | 237 э | 253 ² |
142 О | 158 Ю | 174 о | 190 ╛ | 206 ╬ | 222 ▐ | 238 ю | 254 ■ |
143 П | 159 Я | 175 п | 191 ┐ | 207 ╧ | 223 ▀ | 239 я | 255 |
Русские названия основных спецсимволов:
Символ | Название |
` | гравис, кавычка, обратный машинописный апостроф |
` | гравис, кавычка, обратный машинописный апостроф |
тильда | |
! | восклицательный знак |
@ | эт, коммерческое эт, «собака» |
# | октоторп, решетка, диез |
$ | знак доллара |
% | процент |
^ | циркумфлекс, знак вставки |
& | амперсанд |
* | астериск, звездочка, знак умножения |
( | левая открывающая круглая скобка |
) | правая закрывающая круглая скобка |
— | минус, дефис |
_ | знак подчеркивания |
= | знак равенства |
+ | плюс |
[ | левая открывающая квадратная скобка |
] | правая закрывающая квадратная скобка |
< | левая открывающая фигурная скобка |
> | правая закрывающая фигурная скобка |
; | точка с запятой |
: | двоеточие |
‘ | машинописный апостроф, одинарная кавычка |
« | двойная кавычка |
, | запятая |
. | точка |
/ | слэш, косая черта, знак дроби |
правая закрытая угловая скобка, знак больше | |
\ | обратный слэш, обратная косая черта |
| | вертикальная черта |
Кодировка UNICODE
Юникод (Unicode) — стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков. Стандарт предложен в 1991 году некоммерческой организацией «Консорциум Юникода».
В Unicode используются 16-битовые (2-байтовые) коды, что позволяет представить 65536 символов.
Применение стандарта Unicode позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы, при этом становится ненужным переключение кодовых страниц.
Тип кодировки задается в свойствах проекта Microsoft Visual Studio:
Многобайтовая кодировка предполагает использование кодировки ASCII.
При этом при построении проекта используется директива условной компиляции, переопределяющая тип TCHAR :
Для перекодирования строки в формат Unicode без изменения кодировки файла используется макроопределение
_T(«строка»)
кодовая страница
Смотреть что такое «кодовая страница» в других словарях:
Кодовая страница — (англ. code page) таблица, сопоставляющая каждому значению байта некоторый символ (или его отсутствие). Обычно код символа имеет размер 8 бит, так что кодовая страница может содержать максимум 256 символов, из чего вытекает резкая… … Википедия
кодовая страница — Страница, на которой записаны коды клавиатуры, используемой в какой либо стране. Главную роль здесь играют символы используемого в стране естественного языка. Каждая клавиатура имеет свой номер. [Гипертекстовый энциклопедический словарь по… … Справочник технического переводчика
Страница — Страница: Страница любая из двух сторон листа бумаги (обычно в книге или тетради). Машинописная страница единица измерения объёма текста, весьма распространённая в докомпьютерную эпоху. Один авторский лист составляет примерно 22 23 машинописных… … Википедия
codepage — Кодовая страница (Codepage) Способ хранения информации о шрифте [упорядоченное множество знаков определенной системы письма] в памяти компьютера, включающий заранее заданный упорядоченный стандартный Комплект знаков (кодировку) для набора… … Шрифтовая терминология
CP850 — Кодовая страница 850 используется в Западной Европе на персональных компьютерах с MS DOS и другими подобными операционными системами, а также в консольных программах Microsoft Windows. CP850 отличается от CP437 тем, что включает все символы ISO… … Википедия
Октеты со старшим битом 1 — Подмножество октетов со старшим битом 1 включает те значения октета, у которых старший бит равен единице (установлен). Содержит коды 10000000..11111111 в двоичном представлении, 0x80..0xFF в шестнадцатеричном, 0200..0377 в восьмеричном, 128..255… … Википедия
Чистый 8-бит — Подмножество октетов со старшим битом 1 включает те значения октета, у которых старший бит равен единице (установлен). Содержит коды 10000000..11111111 в двоичном представлении, 0x80..0xFF в шестнадцатеричном, 0200..0377 в восьмеричном, 128..255… … Википедия
Alt-код — Проверить информацию. Необходимо проверить точность фактов и достоверность сведений, изложенных в этой статье. На странице обсуждения должны быть пояснения … Википедия
Арабское письмо — Тип: консонантное Языки: Арабский, перс … Википедия
Болгарская кодировка — «Болгарская кодировка» (называемая также MIK, Interprog и «старый вариант ВЦ АН СССР») это кодовая страница, применявшаяся на компьютерах болгарского производства (например, «Правец»). Эта кодировка не зафиксирована ни в одном нормативном… … Википедия