我在使用条形码扫描仪向网络界面输入字符时遇到字符代码问题。
如果条形码有诸如 -(破折号/连字符/减号)之类的符号,它会给出字符代码 189,这在许多字符集中都是正确的。事实上,如果我在进行扫描时选择了文本输入,它将按预期输入 - 字符。但是,如果我从全局文档中拦截 keypress 或 keyup 事件并使用 fromCharCode() 函数自己构建字符串,而不是让浏览器处理它,我会得到 ½ 字符,这当然是 189 的 unicode 转换代码。
在事件本身中,keyCode 和“which”都显示为 189,而 keyIdentifier 是“U+00BD”。不幸的是,我真正需要的 charCode 值始终为 0。
现在我当然可以在大约 5 秒内手动处理此转换。问题是我不知道我可能从扫描仪获得的完整代码集,而且我担心未处理的字符会在数周或数月后出现并让我头疼。或者,我可以将原始字符代码上传到服务器并尝试用 PHP 处理它。不过,出于时间和响应能力的原因,我更愿意在客户端处理它。将假按键发送到不可见的文本输入可能也可行,但这是一个非常棘手的解决方法。
似乎应该有更好的方法来做到这一点,而且我必须遗漏一些明显的东西。有人有什么想法吗?
最佳答案
如果您通过获取键码并将它们解释为带有 fromCharCode
的字符来拦截键盘处理,您会得到错误的结果,因为键码只是识别按键,而不是字符。与按键关联的字符取决于键盘驱动程序。
因此拦截例程需要知道键盘按键分配。您可以使用常见的 Windows keycodes作为起点,但随后您的软件将依赖于系统。
关于Javascript:非 unicode 字符代码到 unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19278037/