Сценарий Bash с использованием pdfencrypt не работает для определенных символов

Я пишу сценарий bash со следующим фрагментом:

#!/bin/bash # usage '$bash this-script.sh in.pdf out.pdf' stty -echo printf "Password: " read password stty echo echo pdfencrypt "$1" -p "$password" -o "$2" 

на таких символах, как § ä ö ü он выходит из строя со следующим сообщением:

несовместимые кодировки символов: UTF-8 и ASCII-8BIT

Я сталкиваюсь с ошибкой pdfencrypt или неправильно кодируется пример?
Если я использую echo "$password" все идет хорошо.

  • Unicode emoji не отображается в подсказке tcsh
  • KDE5: смесь UTF-8 и ISO-8859-1
  • Почему xxd не показывает знак порядка байтов?
  • Настроить Postfix и Dovecot-LMTP для получения почты через SMTPUTF8?
  • интерпретировать пространство полной ширины как пространство полуширины в bash
  • Как я могу разбивать страницы UTF-8 и видеть правильные символы?
  • Как стереть символы Unicode в терминале?
  • Может ли профиль терминала Gnome использовать UTF-8 по умолчанию?
  • One Solution collect form web for “Сценарий Bash с использованием pdfencrypt не работает для определенных символов”

    Похоже, что pdfencrypt требует 8- pdfencrypt (ISO-8859) закодированного пароля и не знает, как обрабатывать (то есть конвертировать) пароли UTF-8.

    Вы должны использовать совместимую кодировку символов при выполнении pdfencrypt для шифрования и дешифрования. Обычная ASCII («C») или ISO-8859-n (например, «de_DE.latin1», как предложено Hauke ​​Laging) должна работать. На мой взгляд, это просто инструктирует pdfencrypt принимать символы вашего пароля как есть (т. pdfencrypt Не требуется преобразование), вот и все.

    Просто добавьте эту строку вверху вашего скрипта:

     export LC_ALL=de_DE.latin1 # Or fr_FR, or latin15, or... Any valid locale for your system 

    Или изменить эту единственную строку может быть достаточно:

     LC_ALL=de_DE.latin1 pdfencrypt "$1" -p "$password" -o "$2" 

    Сделайте то же самое для декодирования.

    Если вы конвертируете свой пароль с помощью iconv вместо установки LC_ALL, я думаю, у вас будет такая же проблема, поскольку pdfencrypt прежнему полагает, что вы даете ему символы UTF-8, когда он встречает 8-битные.

    Во всяком случае, чтобы все было проще, вы, вероятно, должны придерживаться 7-битного набора символов ASCII: пробел, буквы без акцента, цифры, основные знаки пунктуации и т. Д. ( man 7 ascii )

    Что касается пространства, вы должны знать, что чтение в определенную переменную с ( read -r var ) удаляет начальные и конечные пробелы (на самом деле символы в переменной оболочки IFS ). Это может раздражать пароль. Вы должны использовать read -r который переводит всю строку в переменную REPLY .

    Это даст код:

     export LC_ALL=de_DE.latin1 read -r -s -p "Password: " echo pdfencrypt "$1" -p "$REPLY" -o "$2" 
    Interesting Posts

    Служба mariadb не запускается после загрузки, CentOS 7

    Возможно ли записывать звук непосредственно на оптический дисковод компьютера?

    Создание файла fasta из 2 разных файлов

    Сценарий Bash для scp-интерпретации тильды (~) слишком рано

    Как настроить разрешения, чтобы позволить apache безопасно иметь доступ к файлу в общей среде?

    mkfsdos: определить размер файловой системы FAT16 | 32 на USB-накопителе в Linux

    Извлечь строку, если первое поле содержит точку

    Как создать плагины dnscrypt?

    Являются ли устройства с ядрами ниже 3.6 уязвимыми для CVE-2016-5696?

    Вложенные монтируемые nfs отказываются на стороне клиента

    Перезапуск службы systemd при сбое зависимости

    Просмотреть текущее определение функции оболочки

    Как часто Debian обновляет свой стабильный репозиторий?

    Мышь VMware иногда удерживается (не может «unclick», левая кнопка мыши перестает работать, хватайте ungrab)

    Не удается получить разрешения доступа к серверу

    Linux и Unix - лучшая ОС в мире.