[Python-es] Codificacion de %F3
Pixu Kideak
pixukideak en gmail.com
Lun Feb 19 11:39:54 EST 2024
Buenas tardes,
Tengo un problema con una codificación.
Estoy tras una API realizada con FastAPI que corre sobre uvicorn.
Una llamada a la api sería lo siguiente:
@app.get("/actualizarv2" ,summary="Actualiza 1 cliente",
description="Actualiza la información para 1 cliente <i>(NombreCliente)</i>
en una semana <i>(semana)</i> determinada.")
async def run_actualizar(NombreCliente: str, semana: str):
try:
script_path = "/home/debian/xxx/logs/API/actualizar.sh"
#NombreCliente = NombreClienteDe
# Validar y escapar la ruta del script
script_path_escaped = shlex.quote(script_path)
#Parseo de variables
#NombreCliente = urllib.parse.unquote_plus(NombreCliente)
NombreCliente = urllib.parse.unquote(NombreCliente,
encoding='utf-8')
semana = urllib.parse.quote(semana, safe='')
# Crear el comando con las variables como argumentos
command = [script_path_escaped, NombreCliente, semana]
# Ejecutar el script de manera asíncrona
process = await asyncio.create_subprocess_exec(
*command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# Esperar a que el script termine y obtener la salida y el error
stdout, stderr = await process.communicate()
# Decodificar la salida y el error a UTF-8
output = stdout.decode("utf-8")
error = stderr.decode("utf-8")
return {"output": output, "error": error}
except Exception as e:
return {"error": str(e)}
En esa llamada realizó una llamada a actualizar.sh:
#!/bin/bash
# Recibir los valores de NombreCliente y semana pasados por línea de
comandos
export LANG=C.UTF-8
NombreCliente=$1
semana=$2
##########################################################################
FECHA=`date +"semana %V %Y-%m-%d %T"`
echo "$FECHA INICIO : actualizar.sh" >> /home/debian/xxx/logs/API.log
echo "$FECHA NOMBRE : $NombreCliente" >> /home/debian/xxx/logs/API.log
echo "$FECHA PARAM1 : $1" >> /home/debian/xxx/logs/API.log
# cambiar al directorio deseado
...
Si el GET fuera similar a esto:
"GET
/actualizarv2?NombreCliente=Platanos+RojosSL+%28S7%2C+Libres+Paszk%F3w%29&semana=9
En el fichero API.log escribe una entrada similar a:
semana 08 2024-02-19 17:19:03 INICIO : actualizar.sh
semana 08 2024-02-19 17:19:03 NOMBRE : Platanos Rojos (S7, Libres Paszk�w)
semana 08 2024-02-19 17:19:03 PARAM1 : Platanos Rojos (S7, Libres Paszk�w)
Lo que yo deseo, es que escriba Platanos Rojos (S7, Libres Paszków). Que
pueda interpretar por ejemplo ó en lugar de �
He revisado por activa y por pasiva la codificación utilizada, en el
servidor el locale es: LANG=es_ES.UTF-8 por lo que entiendo que ese no debe
ser el problema.
Pero algo ocurre cuando paso el parámetro al script de bash que no lo coge
cómo debe o lo interpreta de manera incorrecta.
¿Sabéis cúal puede ser la solución?
Un saludo y gracias por vuestra colaboración,
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://mail.python.org/pipermail/python-es/attachments/20240219/d93e0a01/attachment.html>
Más información sobre la lista de distribución Python-es