Java 爪哇机器人类印刷土耳其字母(Ö;ö;Ş;ş;Ü;ü;Ğ;ğ;İ;ı;Ç;Ə;&)?

Java 爪哇机器人类印刷土耳其字母(Ö;ö;Ş;ş;Ü;ü;Ğ;ğ;İ;ı;Ç;Ə;&)?,java,class,keycode,awtrobot,Java,Class,Keycode,Awtrobot,我对通过java robot类按特殊字母(土耳其语等)有问题。我有一个按键的方法,它可以作为alt+keycode。我无法将一些特殊字母转换为当前的键码。那我怎么解决呢。塔克斯 例如: KeyStroke ks = KeyStroke.getKeyStroke('ö', 0); System.out.println(ks.getKeyCode()); Output : 246 // So alt+0246='ö' //but if I convert 'ş' to keycode //

我对通过java robot类按特殊字母(土耳其语等)有问题。我有一个按键的方法,它可以作为alt+keycode。我无法将一些特殊字母转换为当前的键码。那我怎么解决呢。塔克斯

例如:

KeyStroke ks = KeyStroke.getKeyStroke('ö', 0);
 System.out.println(ks.getKeyCode());
 Output : 246
 // So alt+0246='ö'
 //but if I convert 'ş' to keycode
 //Output is 351 . So alt+351= '_' and alt+0351= '_' 
 //What is the Correct combination for 'ş'. same for 'Ş', 'ş','Ğ', 'ğ', 'İ', 'ı', 'Ə', 'ə'
按键:

public void altNumpad(int... numpadCodes) {
    if (numpadCodes.length == 0) {
        return;
    }

    robot.keyPress(VK_ALT);

    for (int NUMPAD_KEY : numpadCodes) {
        robot.keyPress(NUMPAD_KEY);
        robot.keyRelease(NUMPAD_KEY);
    }

    robot.keyRelease(VK_ALT);
}

我不知道你为什么这么做

KeyStroke ks = KeyStroke.getKeyStroke('ö', 0);
因为java文档说

public static KeyStroke getKeyStroke(Character keyChar,
                 int modifiers)
//Use 0 to specify no modifiers.
您需要向重载传递除0以外的修改器

你应该试着通过这样的修改

java.awt.event.InputEvent.ALT_DOWN_MASK
所以可能应该试试

KeyStroke ks = KeyStroke.getKeyStroke('ö', java.awt.event.InputEvent.ALT_DOWN_MASK);
Java文档作为参考:

如果你不能正确地从中得到输出,那么你应该考虑字符是UTF-8的事实。


这可能会对您有所帮助,因为Unicode标准中定义了字符数。也可以在HTML中使用,因此可以使用

无论如何,如果在源代码中看到字符,则取决于编辑器正确解释文件的事实(首选UTF-8)

其次,使用的编辑器必须安装包含这些字符的字体。因此,如果键入alt+0351并获取和‘‘’,则这可能只是一个替换字符,表示字体缺少此字符


最后,您应该告诉Java编译器源代码是UTF-8,以确保(
javac-编码utf8
)。

我知道这是一个迟来的答案,但这就是我如何处理土耳其QWERTY键盘的问题

   static void writeRobotWrite(Robot robot, String keys) throws InterruptedException {
    ....
        try {
            robot.keyPress(keyCode);
            robot.delay(20);
            robot.keyRelease(keyCode);
            robot.delay(20);
        }catch (IllegalArgumentException e)
        {
            pressUnicode(c, robot);
        }

    }
}
基本上,当我得到机器人的未定义键码时,我调用pressUnicode函数,即:

    static void pressUnicode(char c, Robot robot)
{
    String cantRecognize = ""+c;
    StringSelection selection = new StringSelection(cantRecognize);
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents(selection, null);
    robot.keyPress(KeyEvent.VK_CONTROL);
    robot.keyPress(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_V);
    robot.keyRelease(KeyEvent.VK_CONTROL);
}

简单地说,我只是复制和粘贴角色。这适用于所有未定义的字符。:)

这些字符中的某些字符是否在BMP之外?从中,似乎应该在Windows下使用Alt+015 f。我没有窗口,所以无法测试…无法工作。感谢您不能在Windows中按Alt+015F,除非您在注册表中启用了
EnableHexNumpad
,但没有HexNumpad,只能输入代码点1-255