Javascript:非 unicode 字符代码到 unicode 字符

Javascript: Non-unicode char code to unicode character?

本文关键字:字符 unicode 代码 Javascript      更新时间:2023-09-26

我在使用用于向 Web 界面输入字符的条形码扫描仪时遇到了字符代码问题。

如果条形码有一个符号,例如 - (破折号/连字符/减号(,它会给我字符代码 189,这在许多字符集中都是正确的。事实上,如果我在扫描时选择了文本输入,它将按预期输入 - 字符。但是,如果我从全局文档中截获按键或 keyup 事件并使用 fromCharCode(( 函数自己构建字符串,而不是让浏览器处理它,我会得到 1/2 字符,这当然是 189 代码的 unicode 转换。

在事件本身中,keyCode 和 "which" 都显示为 189,而 keyIdentifier 显示为 "U+00BD"。不幸的是,我真正需要的字符代码值始终为 0。

现在当然,我现在可以在大约 5 秒内手动处理此转换。问题是我不知道我可能从扫描仪获得的全套代码,我担心一个未处理的角色在未来几周或几个月内出现并令人头疼。或者,我可以将原始字符代码上传到服务器并尝试在 PHP 中处理它。不过,出于时间和响应能力的原因,我更愿意在客户端上处理它。将假按键发送到不可见的文本输入也可能有效,但这是一个非常黑客的解决方法。

似乎应该有更好的方法来做到这一点,我必须错过一些明显的东西。有人有什么想法吗?

如果您通过获取键码来拦截键盘处理并将它们解释为带有 fromCharCode 的字符,则会得到错误的结果,因为键代码只是标识按键,而不是字符。与按键关联的字符取决于键盘驱动程序。

因此,拦截例程需要知道键盘键分配。您可以使用常见的 Windows 键代码作为起点,但随后您的软件将依赖于系统。

您可以使用 charCodeAt((;

var str = "HELLO WORLD";
var n = str.charCodeAt(0); //returns 72, the unicode value of H

参考:http://www.w3schools.com/jsref/jsref_charCodeAt.asp

应使用 keypress 事件来获取可靠的字符信息。所有浏览器都将字符代码存储在事件的 which 属性中。除 IE8 及更低版本外,它们将字符代码存储在 keyCode 属性中。

因此,要为给定的keypress事件获取正确的字符代码,请使用以下命令:

document.addEventListener('keypress', function (event) {
    // Get the proper character code
    var charCode = (typeof event.which === 'number') ? event.which : event.keyCode;
    // Do stuff
});

您可以通过打开一个新选项卡,将其指向about:blank并在开发人员工具控制台中输入以下内容来轻松测试结果:

document.addEventListener('keypress', function (event) {
    // Get the proper character code
    var charCode = (typeof event.which === 'number') ? event.which : event.keyCode;
    console.log('charCode = ' + charCode);
    console.log('fromCharCode returns ' + String.fromCharCode(charCode));
});

键入短划线时的输出:

charCode = 45
fromCharCode returns -

将此与观察keyup事件进行比较。如果要更改上面的示例以侦听 keyup 事件,则短划线的输出将为:

charCode = 189
fromCharCode returns ½

这是你可以使用的东西吗?如果您想阅读更多有关使用键盘事件的恐怖信息,这是一篇关于该主题的精彩文章。