OnKeyDown事件编码不正确

时间:2016-11-05 09:23:11

标签: gwt character-encoding

我使用以下代码捕获文档获得焦点时键入的所有字符:

RootPanel.get().addDomHandler(new KeyDownHandler() {

            @Override
            public void onKeyDown(KeyDownEvent event) {
                char key = (char) event.getNativeKeyCode();
                String keyString = String.valueOf(key);
                if (!event.isShiftKeyDown())
                    keyString = keyString.toLowerCase();
                System.out.print(keyString);

            }
        }, KeyDownEvent.getType());

当发送密钥事件的设备使用ASCII(我们无法控制使用的编码)时,我们得到以下输出:

www¾mitcom¾m3

我们可以做些什么来获得Java中正确编码的输入?

1 个答案:

答案 0 :(得分:2)

event.getNativeKeyCode()为您提供了一个关键代码,它不是一个字符。从文档:获取与此事件关联的密钥代码(与物理密钥关联的代码)。。按下键盘上的点给我190。另外在Java char中提到的是16位类型,而int是32位,即通常(char) integerVal是不安全的操作。

现在您可能想要使用的是event.getNativeEvent().getCharCode()。问题是0中的KeyDownEvent总是KeyPressHandler & KeyPressEvent。因此,我建议使用private void onKeyPress(KeyPressEvent event) { char c = (char) event.getNativeEvent().getCharCode(); String s = String.valueOf(c); if (event.isShiftKeyDown()) { s = s.toUpperCase(); } GWT.log(s); } RootPanel.get().addDomHandler(this::onKeyPress, KeyPressEvent.getType()); 。您的代码如下:

X-HTTP-Method-Override