Як маніпулювати символами керування?

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

В даний час моє веб-програма приймає ASCII контрольний символ рядок і перетворює значення, наприклад, якщо введено ^ C значення 5e43 повертається який представляє "^" і "6", а не control-c, який представлений як 02 в hex.

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

2

1 Відповіді

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

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

  • they are not one character long. you need up to six characters to represent them. try hitting Esc-Ctrl-alt-left-arrow.
  • esc implies Alt but alt does not imply esc. if the first character is an esc then the next character is the meta/alt of its character value. so if you see esc-b this is Alt-b
  • some keys (page up for example) send the esc automatically.
  • esc-esc is it's own thing (which I can't say I fully understand).

Найкращий спосіб полягає в написанні невеликої програми, яка одночасно читає з клавіатури одного символу, а потім починає стирати клавіатуру і подивитися, що ви можете придумати.

Тут я двічі прочитаю символ з у і перший раз натисніть home і другий end

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

Так чітко одного персонажа недостатньо, щоб відрізнити ці два ключі, як про двох символів?

This next example won't run in the repl because the repl tries to "handle" control character for you, so you will have to make a new project lein new esc add this code then lein uberjar and 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

Here is esc-end

^[^[OF
27
27
79
70
10

And the ctrl character grand prize winner thus far esc-right-arrow

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

приймаючи приз за шість байт.

5
додано