[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