Сейчас я работаю над небольшим приложением, которое
- буквально печатает Strong> ввод
- из системного буфера обмена (с использованием Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);),
- имитируя нажатия клавиш клавиатуры (с помощью java.awt.Robot.keyPress(keyCode)).
Это для в некоторых случаях элементы пользовательского интерфейса не поддерживают копирование и вставку (ни Ctrl+V, ни Shift+ins) или управление неактивными клавишами блокируется в приложении или во всей системе.
Это заняло у меня время. довольно много времени, чтобы найти простое решение: использовать метод ввода Alt-Key. (По сути, нажмите Alt, введите код, например 0128 для €, затем отпустите Alt, badaa: вы получите €.
Чтобы получить этот код, я могу просто преобразовать символ в байты (
Код: Выделить всё
String.getBytes
Все это прекрасно работает во всех случаях, с которыми я сталкивался до сих пор.
Проблема
НО: у этого метода есть один недостаток: мне нужно знать кодировку/кодовую страницу клавиатуры операционной системы.
Обычно под Windows это однобайтовые CP1252, но это зависит от страны и операционной системы.
Вопрос:
Как узнать, какая кодировка/кодовая страница используется в настоящее время операционная система поддерживает ввод с клавиатуры?
(Предпочтительный ответ, если возможно, связан с Java.)
Советы
Следующие способы получения кодировок НЕ жизнеспособны, поскольку они связаны только с файловым вводом-выводом:
Код: Выделить всё
java.lang.System.getProperty("file.encoding")
Код: Выделить всё
java.nio.charset.Charset.defaultCharset()
- (который представляет собой просто java.io.InputStreamReader.getEncoding() и обычно все равно заканчивается вызовом java.nio.charset.Charset.defaultCharset()...)
Код: Выделить всё
java.io.FileReader.getEncoding()
Параметр командной строки JVM, например java -Dfile.encoding=XXX app или client.encoding.override, но его нужно будет настроить вручную, что является более простой задачей не предоставлено пользователю
- Windows PowerShell: [System.Text.Encoding]::Default, но для этого требуется Windows и PowerShell...
- Нужно ли мне использовать JNI и BOOL GetKeyboardLayoutName(LPTSTR pwszKLID); и надеяться, что это будет соответствовать кодировкам Java?
Подробнее здесь: https://stackoverflow.com/questions/791 ... -alt-key-c