Как я могу кодировать и декодировать строки в процентах (URL-кодирование) в командной строке?
Я ищу решение, которое может сделать это:
$ percent-encode "ændrük"
%C3%A6ndr%C3%BCk
$ percent-decode "%C3%A6ndr%C3%BCk"
ændrük
command-line
conversion
text
encoding
url
ændrük
источник
источник
%E6ndr%FCk
мне не кажется (стандартным) UTF8. Или это просто пример?Ответы:
Эти команды делают то, что вы хотите:
Если вы хотите кодировать пробелы как
+
, заменитеurllib.quote
наurllib.quote_plus
.Я предполагаю, что вы захотите сделать их псевдонимами ;-)
источник
ракушка
Попробуйте следующую командную строку:
Вы можете определить его как псевдоним и добавить его в rc- файлы вашей оболочки :
Тогда каждый раз, когда вам это нужно, просто идите с:
удар
При создании сценариев вы можете использовать следующий синтаксис:
Однако приведенный выше синтаксис не будет
+
правильно обрабатывать pluses ( ), поэтому вы должны заменить их пробелами черезsed
.Вы также можете использовать следующие
urlencode()
иurldecode()
функцию:Баш + XXD
Функция Bash с
xxd
инструментом:Находится в gist-файле cdown , также в stackoverflow .
питон
Попробуйте определить следующие псевдонимы:
Использование:
Источник: русланспивак
PHP
Используя PHP, вы можете попробовать следующую команду:
или просто:
Используйте
-R
для многострочного ввода.Perl
В Perl вы можете использовать
URI::Escape
.Или обработать файл:
СЭД
Использование
sed
может быть достигнуто путем:AWK
Попробуйте другое решение:
Смотрите: Использование awk printf для urldecode текста .
расшифровка имен файлов
Если вам нужно удалить кодировку URL из имен файлов, используйте
deurlname
инструмент изrenameutils
(напримерdeurlname *.*
).Смотрите также:
Связанный:
источник
%
, может быть , вы могли бы заменитьprintf "$c"
сprintf "%c" "$c"
? Другая проблема заключается в том, что некоторые не-ASCII-символы не закодированы (например,ä
в некоторых языковых настройках), может быть, добавитьexport LC_ALL=C
в функцию (что не должно влиять на что-либо вне функции)?Кодирование в процентах зарезервированных символов URI и не-ASCII символов
-s
(--slurp
) читает входные строки в массив и-s -R
(--slurp --raw-input
) читает входные данные в одну строку.-r
(--raw-output
) выводит содержимое строк вместо строковых литералов JSON.Процент-кодирование всех символов
tr -d \\n
удаляет переводы строк, которые добавляютсяxxd -p
после каждых 60 символов.Процентное кодирование всех символов, кроме буквенно-цифровых символов ASCII, в Bash
Без
-d ''
этого пропускаются переводы строк и нулевые байты. БезIFS=
этого заменил бы символы вIFS
с%00
. БезLC_ALL=C
этого было бы , например , заменитьあ
с%3042
в UTF-8 локали.источник
Pure Bash Solution только для декодирования :
источник
Я не могу комментировать лучший ответ в этой теме , так что вот мой.
Лично я использую эти псевдонимы для кодирования и декодирования URL:
Обе команды позволяют вам преобразовывать данные, передаваемые в качестве аргумента командной строки или считывать их из стандартного ввода , поскольку обе однострочные строки проверяют наличие аргументов командной строки (даже пустых) и обрабатывают их или просто читают стандартный ввод в противном случае.
обновление 2015-07-16 (пусто, 1-й аргумент)
... согласно комментарию @muru.
обновление 2017-05-28 (косая черта)
Если вам также необходимо кодировать косую черту, просто добавьте второй пустой аргумент в функцию кавычек, тогда косая черта также будет закодирована.
Итак, наконец,
urlencode
псевдоним в bash выглядит так:пример
источник
sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
может быть более подходящим. Особенно, если вы используете это в сценариях и случайно задаете пустой первый аргумент.len(sys.argv) < 2 and sys.stdin.read()[0:-1] or sys.argv[1]
Сейчас:sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
То есть, если есть даже пустой первый аргумент, команда не ожидает ввода от стандартного ввода, а обрабатывает пустой аргумент.Я нашел пакет,
renameutils
содержащий утилиту,deurlname
которая может переименовывать файл, содержащий символы в процентах.К сожалению, он не декодирует стандартный ввод или параметр командной строки, а только переименовывает файл, поэтому для получения декодирования (имени переименованного файла) необходимо создать фиктивный файл, но с помощью некоторых сценариев bash процесс можно автоматизировать. ,
Нет информации о кодирующей части, даже потому что может быть сомнительно, какие символы кодировать. Только не ASCII?
Я думаю, что должен быть какой-то лучший инструмент / метод.
источник
Аналогично ответу Стефано, но в Python 3:
Для кодирования также косые черты:
Больше информации о разнице здесь .
источник
Вот функция POSIX Awk для кодирования:
пример
источник