Saltar al contenido

Docker Python establece la configuración regional utf-8

Solución:

Version corta

Pon esto en tu Dockerfile:

ENV PYTHONIOENCODING=utf-8

o como se menciona en los comentarios anteriores, páselo en la línea de comando:

docker run -e PYTHONIOENCODING=utf-8 my-python-image some-command

Versión larga:

Cuando inicia el intérprete de Python, Python tiene que configurar stdout para enviar la salida a su terminal. En su sistema operativo moderno, su terminal probablemente informa que es compatible con UTF-8 o alguna otra codificación avanzada. Puede ver qué codificación se usa ejecutando este comando:

$ python -c 'import sys; print(sys.stdout.encoding)'
UTF-8

Cuando ejecuta un contenedor de ventana acoplable, las variables de entorno que Python esperaría usar una codificación más avanzada no están presentes, por lo que Python recurrirá a un conjunto de caracteres básico para garantizar la compatibilidad. Puede verificar esto ejecutando el mismo comando en su contenedor:

$ docker run my-python-image python -c 'import sys; print(sys.stdout.encoding)'
ANSI_X3.4-1968

Cuando pasamos PYTHONIOENCODING vemos el sys.stdout.encoding está configurado apropiadamente:

$ docker run -e PYTHONIOENCODING=UTF-8 my-python-image python -c 'import sys; print(sys.stdout.encoding)'
UTF-8

Leer acerca de PYTHONIOENCODING en la documentación de Python. Esta respuesta también entra en gran detalle sobre la codificación / decodificación y stdout.

Me encontré con el mismo problema mientras implementaba una aplicación Django con supervisor y gunicorn.

Lo que se solucionó fue agregar la siguiente línea a mi archivo de configuración de supervisor:

environment=LANG="es_ES.utf8", LC_ALL="es_ES.UTF-8", LC_LANG="es_ES.UTF-8"

Para su caso, asegúrese de que la configuración regional china que desea imprimir esté disponible e instalada en su contenedor docker. Este blog describe cómo hacerlo: ejemplo dockerfile (use la configuración regional china en lugar de en_CA.UTF-8):

FROM ubuntu:15.10
MAINTAINER Mobify <[email protected]>

RUN apt-get -qq update && 
    apt-get -q -y upgrade && 
    apt-get install -y sudo curl wget locales && 
    rm -rf /var/lib/apt/lists/*

# Ensure that we always use UTF-8 and with Canadian English locale
RUN locale-gen en_CA.UTF-8

COPY ./default_locale /etc/default/locale
RUN chmod 0755 /etc/default/locale

ENV LC_ALL=en_CA.UTF-8
ENV LANG=en_CA.UTF-8
ENV LANGUAGE=en_CA.UTF-8

con suerte, esto le llevará en la dirección correcta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *