Как получить внутреннюю кодировку/кодировку клавиатуры операционной системы, связанную с вводом символов с помощью клавиJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как получить внутреннюю кодировку/кодировку клавиатуры операционной системы, связанную с вводом символов с помощью клави

Сообщение Anonymous »

Предисловие
Сейчас я работаю над небольшим приложением, которое
  • буквально печатает Strong> ввод
  • из системного буфера обмена (с использованием Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);),
  • имитируя нажатия клавиш клавиатуры (с помощью java.awt.Robot.keyPress(keyCode)).

Это для в некоторых случаях элементы пользовательского интерфейса не поддерживают копирование и вставку (ни Ctrl+V, ни Shift+ins) или управление неактивными клавишами блокируется в приложении или во всей системе.
Это заняло у меня время. довольно много времени, чтобы найти простое решение: использовать метод ввода Alt-Key. (По сути, нажмите Alt, введите код, например 0128 для €, затем отпустите Alt, badaa: вы получите €.
Чтобы получить этот код, я могу просто преобразовать символ в байты (

Код: Выделить всё

String.getBytes
и new String(bytes)), но для обоих методов мне нужно указать[/b] правильную кодировку, поскольку Java попытается использовать UTF-8, которая не всегда соответствует строке в соответствии с ОС, особенно в Windows (с использованием cp1252).
Все это прекрасно работает во всех случаях, с которыми я сталкивался до сих пор.
Проблема
НО: у этого метода есть один недостаток: мне нужно знать кодировку/кодовую страницу клавиатуры операционной системы.
Обычно , в Windows это однобайтовый код CP1252, но он будет различаться в зависимости от страны и операционной системы.
Вопрос:
Как узнать, какую кодировку/кодовую страницу использует текущая операционная система для ввода с клавиатуры?
(Предпочтительный ответ, если возможно, связан с Java.)
Советы
Следующие способы получения кодировок НЕ жизнеспособны, поскольку они связаны только с файловым вводом-выводом:
  • Код: Выделить всё

    java.lang.System.getProperty("file.encoding")
  • Код: Выделить всё

    java.nio.charset.Charset.defaultCharset()
  • Код: Выделить всё

    java.io.FileReader.getEncoding()
    (который представляет собой просто java.io.InputStreamReader.getEncoding() и обычно все равно заканчивается вызовом java.nio.charset.Charset.defaultCharset()...)
    Параметр командной строки 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»