That is happening because you are using the keyCode
member, for example, a lower case 'a' and an upper case 'A' have the same keyCode, because is the same key, but a different charCode because the resulting character is different.
To get the charCode, you should use the keypress
event, and get the event.charCode
member if available, otherwise, you get the event.keyCode
which for IE, on the keypress event has the right information.
Give a look to the following example:
document.onkeypress = function (e) {
e = e || window.event;
var charCode = e.charCode || e.keyCode,
character = String.fromCharCode(charCode);
alert(character);
};