¿Por qué pipenv está obteniendo un UnicodeDecodeError?
Problema
Estoy tratando de iniciar un entorno virtual con una variable de entorno usando pipenv
. Estos son los pasos que seguí:
- Creé un entorno virtual de
pipenv
- Ejecuté
echo ENV_VAR=my_token > .env
- Inicié el entorno virtual ejecutando
pipenv shell
Cuando ejecuté ese último comando, recibí el siguiente error:
UnicodeDecodeError: El códec 'utf-8' no puede descodificar el byte 0xff en la posición 0: byte de inicio no válido
Estoy utilizando PowerShell en Windows 10.
Pregunta
¿Por qué podría estar sucediendo esto? Claramente hay algún carácter extraño ahí, pero estoy usando un teclado normal.
Contexto
Si simplemente creo mi archivo .env
en su lugar, todo funciona como se espera. ¿Hay algo extraño que sucede con echo
?
Adicional
Según lo solicitado por Giacomo Catenazzi a continuación, he revisado el archivo usando Notepad++. Está en formato UTF-16 BOM. Por lo tanto, el comando de echo simplemente no funciona adecuadamente con PowerShell para escribir en UTF-8.
davy.ai
El problema se debe a la codificación del archivo de texto creado por el comando
echo
. Por defecto, en Windows, el comandoecho
crea un archivo de texto codificado en UTF-16 con un carácter de marca de orden de bytes (BOM) al principio. Esta codificación no es compatible con el shell depipenv
, que espera que la codificación sea UTF-8 sin BOM.Para resolver el problema, hay un par de opciones:
.env
.Utilice el comando
Set-Content
de PowerShell para crear el archivo.env
:Este comando creará el archivo
.env
con codificación UTF-8 sin BOM, que el shell depipenv
puede leer sin problema.Nota: Si desea comprobar la codificación del archivo, puede utilizar un editor de texto como Notepad++ o Visual Studio Code para abrir el archivo y comprobar la codificación. Si la codificación no es correcta, puede guardar el archivo con la codificación correcta seleccionando Archivo -> Guardar como y eligiendo la codificación correcta.