Jak mogę kodować i dekodować ciągi zakodowane procentowo (URL zakodowane) w wierszu poleceń?
Szukam rozwiązania, które może to zrobić:
$ percent-encode "ændrük"
%C3%A6ndr%C3%BCk
$ percent-decode "%C3%A6ndr%C3%BCk"
ændrük
command-line
conversion
text
encoding
url
ændrük
źródło
źródło
%E6ndr%FCk
dla mnie nie wygląda jak (standardowy) UTF8. Czy to tylko przykład?Odpowiedzi:
Te polecenia robią, co chcesz:
Jeśli chcesz przestrzeniach kodują jak
+
wymienićurllib.quote
zurllib.quote_plus
.Zgaduję, że będziesz chciał je pseudonim ;-)
źródło
muszla
Wypróbuj następującą linię poleceń:
Możesz zdefiniować go jako alias i dodać do plików RC powłoki :
Następnie za każdym razem, gdy jej potrzebujesz, po prostu skorzystaj z:
grzmotnąć
Podczas pisania skryptów możesz użyć następującej składni:
Jednak powyższa składnia nie będzie
+
poprawnie obsługiwać plusów ( ), więc musisz zastąpić je spacjami przezsed
.Możesz także użyć następujących funkcji
urlencode()
iurldecode()
funkcji:bash + xxd
Funkcja Bash z
xxd
narzędziem:Znalezione w pliku gist cdown , również w stackoverflow .
Pyton
Spróbuj zdefiniować następujące aliasy:
Stosowanie:
Źródło: ruslanspivak
PHP
Za pomocą PHP możesz wypróbować następujące polecenie:
Lub tylko:
Użyj
-R
do wprowadzania wielu linii.Perl
W Perlu możesz używać
URI::Escape
.Lub przetworzyć plik:
sed
Używanie
sed
można osiągnąć poprzez:awk
Wypróbuj rozwiązanie anonowe :
Zobacz: Używanie awk printf do kodu urldecode .
dekodowanie nazw plików
Jeśli chcesz usunąć kodowanie adresu URL z nazw plików, użyj
deurlname
narzędzia zrenameutils
(npdeurlname *.*
.).Zobacz też:
Związane z:
źródło
%
, może można zastąpićprintf "$c"
zprintf "%c" "$c"
? Innym problemem jest to, że niektóre znaki nie będące kodami ASCII nie są zakodowane (np.ä
) W niektórych ustawieniach języka, może dodać funkcjęexport LC_ALL=C
w (co nie powinno wpływać na nic poza funkcją)?Kodowane w procentach zastrzeżone znaki URI i znaki spoza ASCII
-s
(--slurp
) odczytuje wiersze wejściowe do tablicy, a-s -R
(--slurp --raw-input
) odczytuje dane wejściowe w jednym ciągu.-r
(--raw-output
) wyświetla zawartość ciągów zamiast literałów JSON.Kodowanie procentowe wszystkich znaków
tr -d \\n
usuwa źródła linii, które są dodawanexxd -p
po każdych 60 znakach.Kodowanie procentowe wszystkich znaków oprócz znaków alfanumerycznych ASCII w języku Bash
Bez
-d ''
tego pomijałoby podawanie linii i zerowe bajty. BezIFS=
tego byłoby zastąpić znakiIFS
z%00
. BezLC_ALL=C
tego byłoby na przykład wymienićあ
ze%3042
w UTF-8.źródło
Rozwiązanie Pure Bash do dekodowania :
źródło
Nie mogę komentować najlepszej odpowiedzi w tym wątku , więc oto moja.
Osobiście używam tych aliasów do kodowania i dekodowania adresów URL:
Oba polecenia pozwalają na konwersję danych przekazywanych jako argument wiersza poleceń lub odczytanie go ze standardowego wejścia , ponieważ oba wiersze jednowierszowe sprawdzają, czy istnieją argumenty wiersza polecenia (nawet puste) i przetwarzają je, lub po prostu czytają standardowe wejście w inny sposób.
aktualizacja 2015-07-16 (pusty 1. arg)
... zgodnie z komentarzem @muru.
aktualizacja 2017-05-28 (kodowanie ukośnika)
Jeśli musisz również zakodować ukośnik, po prostu dodaj pusty drugi argument do funkcji cudzysłowu, ukośnik również zostanie zakodowany.
Ostatecznie
urlencode
alias w bash wygląda następująco:Przykład
źródło
sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
może być bardziej odpowiednie. Zwłaszcza jeśli użyjesz tego w skryptach i przypadkowo podasz pusty pierwszy argument.len(sys.argv) < 2 and sys.stdin.read()[0:-1] or sys.argv[1]
Teraz:sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
To znaczy, jeśli pierwszy pusty argument jest pusty, polecenie nie czeka na dane wejściowe ze standardowego wejścia, ale przetwarza pusty argument.Znalazłem pakiet,
renameutils
który zawiera narzędzie,deurlname
które może zmienić nazwę pliku zawierającego znaki „zakodowane procentowo”.Niestety, nie dekoduje standardowego wejścia lub opcji wiersza poleceń, a jedynie zmienia nazwę pliku, więc musisz utworzyć plik zastępczy, aby uzyskać dekodowanie (nazwę pliku o zmienionej nazwie), ale w przypadku niektórych skryptów bash proces można zautomatyzować .
Brak informacji na temat części kodującej, nawet ponieważ może być wątpliwe, które znaki należy zakodować. Tylko nie-ASCII?
Myślę, że powinno być jakieś lepsze narzędzie / metoda.
źródło
Podobny do Ansano Stefano, ale w Pythonie 3:
Aby zakodować również ukośniki:
Więcej informacji o różnicy tutaj .
źródło
Oto funkcja POSIX Awk do kodowania:
Przykład
źródło