Определение кода введенного символа. Метод getAscii()

Иногда необходимо знать, не какая клавиша была нажата, а какой символ она ввела. Для решения этой задачи метод getCode() не всегда эффективен. Так, одна и та же клавиша может вводить до 4 различных символов, поэтому по одному лишь ее виртуальному коду невозможно однозначно определить, какой символ был добавлен. Чтобы справиться с этой проблемой, нужно использовать метод getAscii() объекта Key:

// При введении латинской 'А' в Output будет выведено сообщение
Key. addListener(this);
this.onKeyDown = function():Void {
if (Key.getAscii() == "A".charCodeAt(0)) {
}
};

Метод getAscii() возвращает позицию введенного символа в используемой операционной системой кодовой странице. Это означает, что само название метода не совсем точно. ASCII — это семибитовая кодировка (в ней 128 символов), включающая латинские буквы обоих регистров, цифры, знаки препинания, символы операторов, служебные символы. Однако в чистом виде ASCII в настоящее время практически не используется. Ввиду возросших потребностей применяются восьмибитовые кодировки. Они способны описывать 256 символов, поэтому в них могут входить национальные алфавиты, символы псевдографики и специальные знаки.


Первые 128 символов восьмибитовых кодировок обычно совпадают с ASCII. Поэтому если вводятся только буквы латинского алфавита или цифры, то метод getAscii() действительно будет возвращать для них те же колы, что соответствуют им в ASCII. Однако если вы добавите кирилличный символ, то его код будет превышать 128. Естественно, что говорить в этом случае о ASCII-коде не совсем правильно. Очевидно, что название методу getAscii() было дано в расчете на американских разработчиков, на клавиатуре которых нет символов, код которых превышал бы 128 (а также исходя из традиции, по которой все производные от ASCII кодировки называются ее именем).

В отличие от метода getCode(), getAscii() способен регистрировать нажатие лишь клавиш символов. Если же была задействована служебная кнопка или ни одна клавиша нажата не была, он возвращает 0.

Используя getAscii(), можно определять не только то, какую букву — латинскую или русскую — ввела клавиша. Так как буквы в разном регистре — это различные символы, то возвращаемое getAscii() значение зависит от того, «большая» или «маленькая» буква была добавлена.

Для метода getAscii() не имеет значения, какая кнопка ввела символ.


Важно лишь то, что это за символ. Поэтому, например, не важно, при помощи какой клавиатуры — числовой или основной — была добавлена цифра: возвращенный getAscii() код будет одним и тем же.

В разных странах используются разные кодировки. Это означает, что нажатие одной и той же клавиши может приводить к добавлению символов с разными положениями в кодовых страницах.

Поэтому, если ваш проект будет рассчитан на международную аудиторию, зачастую стоит воздержаться от применения метода getAscii(). В таких случаях куда более подходит метод getCode().

Чтобы «отловить» введение определенного символа, нужно при возникновении события onKeyDown сравнить значение, возвращенное методом getAscii(), с кодом этого символа. Но как узнать данный код? Если символ является латинской буквой, цифрой или знаком, то можно воспользоваться методом charCodeAt() класса String, как показано в приведенном выше примере. Однако подобным образом узнать код кирилличной буквы невозможно, так как при этом будет определена ее позиция в Unicode, а не в используемой операционной системой кодовой странице. В этом случае воспользуйтесь следующим тестером:

Key.addListener(this);
this.onKeyDown = function():Void { // Введя символ, вы получите его коп
};

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Контекстное меню
Проверка активности специальных режимов. Метод isToggled()
Проверка нажатия клавиши. Метод isDown()
Работа с клавиатурой
Работа с мышью