Comment puis-je encoder et décoder des chaînes encodées en pourcentage (encodées URL) sur la ligne de commande?
Je recherche une solution qui peut le faire:
$ percent-encode "ændrük"
%C3%A6ndr%C3%BCk
$ percent-decode "%C3%A6ndr%C3%BCk"
ændrük
command-line
conversion
text
encoding
url
ændrük
la source
la source
%E6ndr%FCk
ne me ressemble pas (standard) UTF8. Ou c'est juste un exemple?Réponses:
Ces commandes font ce que vous voulez:
Si vous souhaitez encoder des espaces en tant que
+
, remplacezurllib.quote
parurllib.quote_plus
.Je suppose que vous voudrez les alias ;-)
la source
coquille
Essayez la ligne de commande suivante:
Vous pouvez le définir comme alias et l'ajouter à vos fichiers shell rc :
Ensuite, chaque fois que vous en avez besoin, optez simplement pour:
frapper
Lors de l'écriture de scripts, vous pouvez utiliser la syntaxe suivante:
Cependant, la syntaxe ci-dessus ne gérera pas pluses (
+
) correctement, vous devez donc les remplacer par des espaces viased
.Vous pouvez également utiliser les éléments suivants
urlencode()
eturldecode()
fonctions:bash + xxd
Fonction Bash avec
xxd
outil:Trouvé dans le fichier gist de cdown , également sur stackoverflow .
Python
Essayez de définir les alias suivants:
Usage:
Source: ruslanspivak
PHP
En utilisant PHP, vous pouvez essayer la commande suivante:
ou juste:
À utiliser
-R
pour l'entrée de plusieurs lignes.Perl
En Perl, vous pouvez utiliser
URI::Escape
.Ou pour traiter un fichier:
sed
L'utilisation
sed
peut être réalisée par:awk
Essayez une solution unique :
Voir: Utiliser awk printf pour urldecode .
décodage des noms de fichiers
Si vous devez supprimer le codage url des noms de fichiers, utilisez l'
deurlname
outil derenameutils
(par exempledeurlname *.*
).Voir également:
En relation:
la source
%
, peut-être pourriez-vous remplacerprintf "$c"
parprintf "%c" "$c"
? Un autre problème est que certains caractères non ASCII ne sont pas encodés (commeä
) dans certains paramètres de langue, peut-être ajouter unexport LC_ALL=C
dans la fonction (cela ne devrait pas affecter quoi que ce soit en dehors de la fonction)?Codage en pourcentage caractères URI réservés et caractères non ASCII
-s
(--slurp
) lit les lignes d'entrée dans un tableau et-s -R
(--slurp --raw-input
) lit l'entrée dans une seule chaîne.-r
(--raw-output
) affiche le contenu des chaînes au lieu des littéraux de chaîne JSON.Encoder en pourcentage tous les caractères
tr -d \\n
supprime les sauts de ligne qui sont ajoutés parxxd -p
tous les 60 caractères.Encoder en pourcentage tous les caractères sauf les caractères alphanumériques ASCII dans Bash
Sans
-d ''
cela, les sauts de ligne et les octets nuls seraient ignorés. SansIFS=
cela, les caractères seraient remplacésIFS
par%00
. SansLC_ALL=C
cela, par exemple, le remplaceraitあ
par%3042
un environnement local UTF-8.la source
Solution de bash pure pour le décodage uniquement :
la source
Je ne peux pas commenter la meilleure réponse dans ce fil , alors voici la mienne.
Personnellement, j'utilise ces alias pour l'encodage et le décodage d'URL:
Les deux commandes vous permettent de convertir des données, passées en argument de ligne de commande ou de les lire à partir de l'entrée standard , car les deux lignes simples vérifient s'il existe des arguments de ligne de commande (même vides) et les traitent ou lisent simplement l'entrée standard autrement.
mise à jour 2015-07-16 (1er argument vide)
... selon le commentaire de @muru.
mise à jour 2017-05-28 (codage slash)
Si vous devez également coder la barre oblique, ajoutez simplement un deuxième argument vide à la fonction de devis, puis la barre oblique sera également codée.
Donc, finalement, l'
urlencode
alias dans bash ressemble à ceci:Exemple
la source
sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
pourrait être plus approprié. Surtout si vous l'utilisez dans des scripts et donnez accidentellement un premier argument vide.len(sys.argv) < 2 and sys.stdin.read()[0:-1] or sys.argv[1]
Maintenant:sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
c'est-à-dire, s'il y a même un premier argument vide, la commande n'attend pas l'entrée de l'entrée standard, mais traite un argument vide.J'ai trouvé un package,,
renameutils
qui contient l'utilitairedeurlname
capable de renommer un fichier contenant des caractères "encodés en pourcentage".Malheureusement, il ne décode pas stdin ou une option de ligne de commande, mais renomme uniquement un fichier, vous devez donc créer un fichier factice pour obtenir le décodage (le nom du fichier renommé), mais avec certains scripts bash, le processus peut être automatisé .
Aucune information sur la partie encodage, même parce qu'il pourrait être question des caractères à encoder. Uniquement non ASCII?
Je pense qu'il devrait y avoir un meilleur outil / méthode.
la source
Similaire à Stefano ansqer mais en Python 3:
Pour coder également des barres obliques:
Plus d'informations sur la différence ici .
la source
Voici une fonction POSIX Awk pour l'encodage:
Exemple
la source