Кодировки ANSI и Unicode
Первой известной кодировкой символов была кодировка ASCII, и она используется до сих пор. В ASCII-кодировке каждый символ занимает 8 бит, или один байт. Из-за того, что ASCII была предназначена для западных языков, ее использование было ограничено в европейских странах и регионах, чьи языки содержали символы, не включенные в 256 символов, поддерживаемых ASCII. Чтобы обойти это ограничение, Международная организация по стандартизации (ISO - International Standards Organization) создала новый стандарт кодировки символов, названный Latin-1, который содержал европейские символы, не вошедшие в набор ASCII. Microsoft расширила Latin-1 и назвала этот стандарт ANSI. Но ANSI по-прежнему осталась 8-битной кодировкой, которая может представлять только 256 уникальных символов. Многие языки имеют тысячи символов, особенно азиатские языки, такие как китайский, корейский и японский.
Для преодоления ограничений стандарта на 8-битную кодировку символов, Microsoft в сотрудничестве с такими компаниями, как Apple Computer, Inc., и IBM, создала некоммерческий консорциум Unicode, Inc., целью которого стало определение нового стандарта на кодировку символов для международных наборов символов. Работа, проделанная в Unicode, была объединена с работой, которая велась в ISO, и результатом стал стандарт Unicode для кодировки символов. Unicode является 16-разрядным стандартом, что обеспечивает 65 536 уникальных символов - более чем достаточно для представления всех языков мира. Он поддерживает даже архаические языки, такие как санскрит и египетские иероглифы, и включает знаки препинания, математические и графические символы. Стоит отметить, что скачать фотошоп можно на различных сайтах в интернете.
Родной кодировкой для Windows XP является Unicode, но она поддерживает и ANSI. Внутри себя операционная система представляет имена объектов, пути и имена файлов в виде 16-битовых символов Unicode. Она также обычно использует Unicode для хранения данных в реестре. Если программа сохраняет текст Jerry с использованием ANSI, то он будет выглядеть в памяти как 0х4А 0×65 0×72 0×72 0×79. Однако если программа сохраняет этот же текст с использованием Unicode, то он будет выглядеть в памяти как 0х4А 0×00 0×65 0×00 0×72 0×00 0×72 0×00 0×79 0×00. Почему? Потому, что текст Unicode является 16-битным, и Windows XP сохраняет 16-битные числа в прямом порядке (см. «Прямой и обратный порядок байтов» ранее в этой главе). Таким образом, она запишет в память J как 0х004А (байты перевернуты), затем е как 0×0065, а затем оставшиеся символы как 0×0072, 0×0072, как 0×0079.
Значение null и пустые строки
Если вы писали программы, используя такой язык, как С, то вы должны быть знакомы с концепцией значения null, null является нулевым символом, или 0×00. Windows XP помещает символ null в конце строк так, что программы знают, где заканчивается строка.
В реестре имеется похожая концепция, когда значение может иметь в качестве данных null, что означает, что данных нет вообще. Оно пустое. Обычно, когда вы смотрите на значение null в реестре, вы видите текст «(value not set)» («(значение не присвоено)»). Оно отличается от значения, которое содержит пустую строку - текст, чья длина равна 0, или “”. Значения null и “” не одинаковы.//Книга источник