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,
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es