Как манипулировать управляющими символами? - PullRequest
2 голосов
/ 28 октября 2011

Буду признателен за предложения о том, как преобразовать управляющие символы ASCII, которые передаются через текстовое поле HTML, в их шестнадцатеричное или двоичное представление.

В настоящее время мое веб-приложение принимает управляющий символ ASCII string и преобразует значения, например, если введено ^C, возвращается значение 5e43, которое представляет "^"и "6", а не control-c, который представлен как 02 в шестнадцатеричном виде.

У меня была идея запустить регулярное выражение для ввода, чтобы проверить управляющие символы с чем-то вроде: ^[\w]{1} изатем вернуть значения из предопределенной таблицы, которая соответствует регулярному выражению.

1 Ответ

5 голосов
/ 28 октября 2011

Вы можете напрямую читать из в с помощью (. *in* read), хотя то, как к вам доберутся символы, будет зависеть от многих вещей, особенно в том случае, когда браузер, вероятно, закодирует их http транспорт, прежде чем вы даже начать.

Я поддерживаю защищенный прокси-терминал терминала, который должен обрабатывать все комбинации управляющих символов, поэтому я решил передать несколько замечаний:

  • они не одного символа в длину. вам нужно до шести символов, чтобы представить их. попробуйте нажать Esc - Ctrl - alt - стрелка влево .
  • esc означает Alt , но alt не означает esc . если первый символ является esc , то следующий символ является meta / alt его значения символа. так что если вы видите esc - b , это Alt - b
  • некоторые клавиши (например, страница вверх ) отправляют esc автоматически.
  • esc - esc - это свое дело (я не могу сказать, что полностью понимаю).

Лучший способ - написать небольшую программу, которая будет считывать с клавиатуры по одному символу за раз, а затем начать играть на клавиатуре и посмотреть, что вы можете придумать.

Здесь я прочитаю символ из в дважды и нажму home в первый раз и end во второй

clojure.core=> (. *in* read)
10
clojure.core=> (. *in* read)
10

Так что одного символа недостаточно, чтобы различить эти два ключа, как насчет двух символов?

Следующий пример не будет выполняться в repl, потому что repl пытается «обработать» управляющий символ для вас, поэтому вам придется создать новый проект lein new esc, добавить этот код, затем lein uberjar и java -jar esc-1.0.0-SNAPSHOT-standalone.jar

(ns esc.core
  (:gen-class))

(defn -main []
  (dorun (repeatedly #(println (. *in* read)))))

Запуск и нажатие этих двух клавиш приводит к следующему:

^[OF
27
79
70
10      <-- this is the newline
^[OH
27      <-- esc start marker look for this
79
72
10      <-- this is the newline

Вот esc - end

^[^[OF
27
27
79
70
10

И главный призер персонажа ctrl на данный момент esc - стрелка вправо

^[[1;5C
27
91
49
59
53
67
10

получение приза в шести байтах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...