¿Cómo puedo codificar y decodificar cadenas codificadas por porcentaje (codificadas por URL) en la línea de comandos?
Estoy buscando una solución que pueda hacer esto:
$ percent-encode "ændrük"
%C3%A6ndr%C3%BCk
$ percent-decode "%C3%A6ndr%C3%BCk"
ændrük
command-line
conversion
text
encoding
url
ændrük
fuente
fuente
%E6ndr%FCk
no me parece UTF8 (estándar). ¿O es solo un ejemplo?Respuestas:
Estos comandos hacen lo que quieres:
Si desea codificar espacios como
+
, reemplácelosurllib.quote
conurllib.quote_plus
.Supongo que querrás ponerles alias ;-)
fuente
cáscara
Pruebe la siguiente línea de comando:
Puede definirlo como alias y agregarlo a sus archivos rc de shell :
Luego, cada vez que lo necesite, simplemente vaya con:
golpetazo
Al crear secuencias de comandos, puede usar la siguiente sintaxis:
Sin embargo, la sintaxis anterior no manejará más (
+
) correctamente, por lo que debe reemplazarlos con espacios a través desed
.También puede usar lo siguiente
urlencode()
y lasurldecode()
funciones:bash + xxd
Función bash con
xxd
herramienta:Se encuentra en el archivo GIST de Cdown , también en stackoverflow .
Pitón
Intente definir los siguientes alias:
Uso:
Fuente: ruslanspivak
PHP
Usando PHP puedes probar el siguiente comando:
o solo:
Úselo
-R
para entrada de línea múltiple.Perl
En Perl puedes usar
URI::Escape
.O para procesar un archivo:
sed
El uso
sed
se puede lograr mediante:awk
Trate anon solución:
Consulte: Uso de awk printf para codificar el texto .
decodificar nombres de archivo
Si necesita eliminar la codificación de URL de los nombres de archivo, use la
deurlname
herramienta derenameutils
(pdeurlname *.*
. Ej .).Ver también:
Relacionado:
fuente
%
, tal vez se podría reemplazarprintf "$c"
conprintf "%c" "$c"
? Otro problema es que algunos caracteres no ASCII no están codificados (comoä
) en algunas configuraciones de idioma, ¿tal vez agregar unexport LC_ALL=C
en la función (que no debería afectar a nada fuera de la función)?Codifique el porcentaje de caracteres URI reservados y caracteres no ASCII
-s
(--slurp
) lee líneas de entrada en una matriz y-s -R
(--slurp --raw-input
) lee la entrada en una sola cadena.-r
(--raw-output
) genera el contenido de cadenas en lugar de literales de cadena JSON.Codificación porcentual de todos los caracteres
tr -d \\n
elimina los avances de línea que se agreganxxd -p
después de cada 60 caracteres.Codificación porcentual de todos los caracteres, excepto los caracteres alfanuméricos ASCII en Bash
Sin
-d ''
esto, se omitirían los avances de línea y los bytes nulos. SinIFS=
esto reemplazaría los caracteresIFS
con%00
. SinLC_ALL=C
esto, por ejemplo, reemplazaríaあ
con%3042
en un entorno local UTF-8.fuente
Solución de bash pura solo para decodificar :
fuente
No puedo comentar sobre la mejor respuesta en este hilo , así que aquí está el mío.
Personalmente, uso estos alias para la codificación y decodificación de URL:
Ambos comandos le permiten convertir datos, pasados como un argumento de línea de comandos o leerlos desde una entrada estándar , porque ambos de una línea verifican si hay argumentos de línea de comandos (incluso vacíos) y los procesan o simplemente leen la entrada estándar de lo contrario.
actualizar 2015-07-16 (vacío 1er argumento)
... según el comentario de @muru.
actualizar 2017-05-28 (codificación de barra)
Si también necesita codificar la barra diagonal, simplemente agregue un segundo argumento vacío a la función de comillas, entonces la barra también se codificará.
Entonces, finalmente el
urlencode
alias en bash se ve así:Ejemplo
fuente
sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
podría ser más apropiado. Especialmente si usa esto en scripts y accidentalmente da un primer argumento vacío.len(sys.argv) < 2 and sys.stdin.read()[0:-1] or sys.argv[1]
Ahora:sys.argv[1] if len(sys.argv) > 1 else sys.stdin.read()[0:-1]
es decir, si incluso hay un primer argumento vacío, el comando no espera la entrada de la entrada estándar, sino que procesa un argumento vacío.Encontré un paquete
renameutils
que contiene la utilidaddeurlname
que puede cambiar el nombre de un archivo que contiene caracteres "codificados en porcentaje".Desafortunadamente, no decodifica stdin o una opción de línea de comando, solo cambia el nombre de un archivo, por lo que debe crear un archivo ficticio para obtener la decodificación (el nombre del archivo renombrado), pero con algunas secuencias de comandos bash, el proceso puede automatizarse .
No hay información sobre la parte de codificación, incluso porque podría ser cuestionable qué caracteres codificar. Sólo no ASCII?
Creo que debería haber alguna herramienta / método mejor.
fuente
Similar a Stefano ansqer pero en Python 3:
Para codificar también barras:
Más información sobre la diferencia aquí .
fuente
Aquí hay una función POSIX Awk para codificar:
Ejemplo
fuente