Как избежать специального символа при использовании glib.string.escape () - PullRequest
2 голосов
/ 29 января 2020

Из-за документа glib.string.escape ()

Экранирует специальные символы '\ b', '\ f', '\ n', '\ r', '\ t ',' \ v ',' \ 'и' "'в источнике строки, вставив перед ними' \ '.

Дополнительно все символы в диапазоне 0x01-0x1F (все ниже пробела) и в диапазон 0x7F-0xFF (все не-ASCII-символы) заменяются на '\ ", за которым следует их восьмеричное представление. Символы, указанные в исключениях, не экранируются.

Теперь я хочу not eacape "0x7F-0xFF" символов. Как написать исключение часть?

мой пример кода не работает.

            shellcmd = "bash -c \""+file.get_string(title,"List").escape("0x7F-0xFF")+"\"";
            print("shellcmd: %s\n", shellcmd);
            Process.spawn_command_line_sync (shellcmd,
            out ls_stdout, out ls_stderr, out ls_status);
            if(ls_status!=0){ list = ls_stderr.split("\n"); }
            else{ list = ls_stdout.split("\n"); }

это работает.

shellcmd = "bash -c \""+file.get_string(title,"Check").replace("\"","\\\"")+"\"";

1 Ответ

2 голосов
/ 30 января 2020

На самом деле вы должны поместить символы 0x7f в 0xff в аргументе exceptions. Итак, что-то вроде:

shellcmd = "bash -c \""+file.get_string(title,"List").escape("\x7F\x80\x81\x82…\xfe\xff")+"\"";

Вам нужно было бы перечислить их все вручную.

Если смотреть в целом на ваш код, вы, похоже, создаете команду для запуска. Это очень плохая идея, и вы никогда не должны это делать. Он широко открыт для внедрения кода . Используйте Process.spawn_sync() и передайте ему вектор аргумента.

...