В устаревшей системе, использующей Cygwin в Windows с JRE, мне нужно вызвать программу Java из сценария оболочки и передать ей конкретные аргументы CMD. Аргументы считываются из файла, закодированного в Cp1250 и, следовательно, могут содержать Расширенные символы ASCII .
Сценарий считывает значение аргумента из входного файла в кодировке Cp1250, используя read
.
#!/bin/bash
export LC_ALL=C
# ...
IFS= read -r -n 10 -d '' ARG < "$INPUT_FILE"
# echo "$ARG" > /tmp/argument_test
# ...
java -jar foo.jar "$ARG"
Java-программа получает аргументы, содержащие несовпадающие символы . Однако, когда я проверяю значение аргумента чтения, выводя переменную аргумента в файл tmp, его значение корректно.
Так что, похоже, JRE не знает о среде / кодировке Cygwin, так как она была скомпилирована для Windows. Я пытался установить LC_ALL=C
в сценарии, но пока не повезло.
Можно ли как-нибудь намекнуть на JRE с помощью кодировки, используемой в качестве аргументов? Есть ли другой способ решить эту проблему?