У меня есть программа Java, которая принимает строку и экранирует ее, чтобы ее можно было безопасно передать программе в bash. Стратегия в основном состоит в том, чтобы избежать любого из специальных символов, упомянутых здесь , и заключить результат в двойные кавычки.
Алгоритм довольно прост - просто l oop над строкой ввода и используйте input.charAt(i)
, чтобы проверить, нужно ли экранировать текущий символ.
Эта стратегия хорошо работает для символы, которые не представлены суррогатными парами , но у меня есть некоторые опасения, если в строку встроены нелатинские символы или что-то вроде эмодзи. В этом случае, если мы предположим, что emoji был первым символом в моей входной строке, input.charAt(0)
выдаст мне первую кодовую единицу, а input.charAt(1)
вернет вторую кодовую единицу. Меня беспокоит то, что некоторые из этих блоков кода могут быть интерпретированы как один из специальных символов, которые необходимо экранировать. Если бы это произошло, я бы попытался избежать одного из блоков кода, который безвозвратно исказил бы ввод.
Возможна ли такая вещь? Или безопасно использовать input.charAt(i)
для чего-то подобного?