Wie kann ich prozentual codierte (URL-codierte) Zeichenfolgen in der Befehlszeile codieren und decodieren ?
Ich bin auf der Suche nach einer Lösung, die dies ermöglicht:
$ percent-encode "ændrük"
%C3%A6ndr%C3%BCk
$ percent-decode "%C3%A6ndr%C3%BCk"
ændrük
command-line
conversion
text
encoding
url
ændrük
quelle
quelle
%E6ndr%FCk
sieht für mich nicht wie (Standard) UTF8 aus. Oder ist es nur ein Beispiel?Antworten:
Diese Befehle machen was Sie wollen:
Wenn Sie Leerzeichen als kodieren möchten
+
, ersetzen Sieurllib.quote
durchurllib.quote_plus
.Ich nehme an, du willst sie aliasen ;-)
quelle
Schale
Versuchen Sie die folgende Befehlszeile:
Sie können es als Alias definieren und zu Ihren Shell- RC- Dateien hinzufügen :
Dann gehen Sie jedes Mal, wenn Sie es brauchen, einfach mit:
Bash
Bei der Skripterstellung können Sie die folgende Syntax verwenden:
Die obige Syntax behandelt Pluszeichen (
+
) jedoch nicht korrekt, sodass Sie sie durch Leerzeichen über ersetzen müssensed
.Sie können auch die folgende verwenden
urlencode()
undurldecode()
Funktionen:bash + xxd
Bash-Funktion mit
xxd
Tool:Gefunden in der Hauptdatei von cdown , auch bei stackoverflow .
Python
Versuchen Sie, die folgenden Aliase zu definieren:
Verwendung:
Quelle: Ruslanspivak
PHP
Mit PHP können Sie den folgenden Befehl versuchen:
oder nur:
Verwendung
-R
für mehrzeilige Eingabe.Perl
In Perl können Sie verwenden
URI::Escape
.Oder um eine Datei zu verarbeiten:
sed
Verwendung
sed
kann erreicht werden durch:awk
Versuchen Sie eine andere Lösung:
Siehe: Verwenden von awk printf zum URL-Code von Text .
Dateinamen entschlüsseln
Wenn Sie die URL-Codierung aus den Dateinamen entfernen müssen, verwenden Sie das
deurlname
Tool vonrenameutils
(zdeurlname *.*
. B. ).Siehe auch:
Verbunden:
quelle
%
, vielleicht könnten Sie ersetzenprintf "$c"
mitprintf "%c" "$c"
? Ein weiteres Problem besteht darin, dass einige Nicht-ASCII-Zeichenä
in einigen Spracheinstellungen nicht codiert sind (z. B. ). Fügen Sie möglicherweise einexport LC_ALL=C
in die Funktion ein (das sollte nichts außerhalb der Funktion beeinflussen).Prozentcodierte reservierte URI-Zeichen und Nicht-ASCII-Zeichen
-s
(--slurp
) liest Eingabezeilen in ein Array und-s -R
(--slurp --raw-input
) liest die Eingabe in eine einzelne Zeichenfolge.-r
(--raw-output
) gibt den Inhalt von Strings anstelle von JSON-String-Literalen aus.Prozentcodierung aller Zeichen
tr -d \\n
Entfernt die Zeilenvorschübe, diexxd -p
nach jeweils 60 Zeichen hinzugefügt werden .Prozentcodierung aller Zeichen außer alphanumerischen ASCII-Zeichen in Bash
Ohne
-d ''
dies würden Zeilenvorschübe und Null-Bytes übersprungen. OhneIFS=
dies würde Zeichen inIFS
mit ersetzen%00
. OhneLC_ALL=C
dies beispielsweise ersetzen würdeあ
mit%3042
in einer UTF-8 locale.quelle
Reine Bash-Lösung nur zum Dekodieren :
quelle
Ich kann die beste Antwort in diesem Thread nicht kommentieren , also hier meine.
Persönlich verwende ich diese Aliase für die URL-Codierung und -Decodierung:
Mit beiden Befehlen können Sie Daten konvertieren, die als Befehlszeilenargument übergeben oder von der Standardeingabe gelesen wurden , da beide Einzeilen prüfen, ob Befehlszeilenargumente (auch leere) vorhanden sind, und diese verarbeiten oder die Standardeingabe einfach anderweitig lesen.
Update 16.07.2015 (leeres 1. Argument)
... laut @muru-Kommentar.
Update 28.05.2017 (Schrägstrichcodierung)
Wenn Sie auch den Schrägstrich codieren müssen, fügen Sie der Anführungszeichenfunktion einfach ein leeres zweites Argument hinzu. Der Schrägstrich wird dann ebenfalls codiert.
Der
urlencode
Alias in der Bash sieht also so aus:Beispiel
quelle
sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
könnte angemessener sein. Vor allem, wenn Sie dies in Skripten verwenden und versehentlich ein leeres erstes Argument angeben.len(sys.argv) < 2 and sys.stdin.read()[0:-1] or sys.argv[1]
Now:sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
Das heißt, wenn es überhaupt ein leeres erstes Argument gibt, wartet der Befehl nicht auf die Eingabe von der Standardeingabe, sondern verarbeitet ein leeres Argument.Ich habe ein Paket gefunden,
renameutils
das das Hilfsprogramm enthält, mit demdeurlname
eine Datei mit "prozentcodierten" Zeichen umbenannt werden kann.Leider wird weder stdin noch eine Befehlszeilenoption dekodiert, sondern nur eine Datei umbenannt. Sie müssen daher eine Dummy-Datei erstellen, um die Dekodierung (den Namen der umbenannten Datei) zu erhalten. Mit einigen Bash-Skripten kann der Vorgang jedoch automatisiert werden .
Keine Informationen zum Codierungsteil, auch wenn fraglich ist, welche Zeichen codiert werden sollen. Nur Nicht-ASCII?
Ich denke, es sollte ein besseres Werkzeug / eine bessere Methode geben.
quelle
Ähnlich wie Stefano ansqer, aber in Python 3:
So kodieren Sie auch Schrägstriche:
Mehr Infos zum Unterschied hier .
quelle
Hier ist eine POSIX Awk-Funktion zum Codieren:
Beispiel
quelle