imprimir UTF-8 en Python 3 usando Sublime Text 3
python-3.x sublimetext3 (3)
Funciona, gracias, el script completo del sistema de construcción para Sublime Text 3
Herramienta -> Sistema de compilación -> Nuevo sistema de compilación
{
"shell_cmd": "python /"$file/"",
"file_regex": "^[ ]*File /"(...*?)/", line ([0-9]*)",
"selector": "source.python",
"env": {"PYTHONIOENCODING": "utf8"}
}
Tengo este código Python3 para intentar leer e imprimir desde un archivo codificado utf-8:
f = open(''mybook.txt'', encoding=''utf-8'')
for line in f:
print(line)
Cuando construyo usando Sublime Text 3 obtengo el siguiente error:
UnicodeEncodeError: ''ascii'' codec can''t encode character ''/u2019'' in position 18: ordinal not in range(128)
Sin embargo, funciona cuando solo ejecuto mi código en la terminal con python3.
Mi configuración de compilación es
{
"cmd": ["/usr/local/bin/python3", "$file"]
, "selector": "source.python"
, "file_regex": "file /"(...*?)/", line ([0-9]+)"
}
Si lo cambio a:
f = open(''mybook.txt'', encoding=''utf-8'')
for line in f:
print(line.encode(''utf-8''))
Luego imprime la cadena de bytes codificada utf-8 (creo que eso es lo que está sucediendo).
b''Hello/n''
b''/xc2/xab/xe2/x80/xa2/n''
b''Goodbye''
Pero tampoco sé cómo pasar de esto a imprimir los caracteres Unicode en la pantalla ...
Además, si trato de cambiar esta variable env según el programa A python no se ejecuta en el sublime texto 3, pero el éxito en bash todavía no lo soluciona.
La respuesta estaba realmente en la pregunta vinculada en su pregunta:
PYTHONIOENCODING
debe establecerse en
"utf-8"
.
Sin embargo, dado que OS X es tonto y no capta las variables de entorno establecidas en la Terminal o mediante
.bashrc
o archivos similares, esto no funcionará de la manera indicada en la respuesta a la otra pregunta.
En cambio, debe pasar esa variable de entorno a Sublime.
Afortunadamente, los sistemas de compilación ST3 (no sé acerca de ST2) tienen la opción
"env"
.
Este es un diccionario de claves y valores pasados a
exec.py
, que es responsable de ejecutar sistemas de compilación sin el conjunto de opciones
"target"
.
Como se discutió en nuestros comentarios anteriores, indiqué que su programa de muestra funcionó bien en un archivo de texto codificado en UTF-8 que contiene caracteres no ASCII cuando se ejecuta con ST3 (Build 3122) en Linux, pero no con la misma versión ejecutada en OS X Todo lo que fue necesario para ejecutarlo fue cambiar el sistema de compilación para incluir esta línea:
"env": {"PYTHONIOENCODING": "utf8"},
Guardé el sistema de compilación, presioné ⌘ B y el programa funcionó bien.
Por cierto, si desea leer
exec.py
, o
Packages/Python/Python.sublime-build
, o cualquier otro archivo empaquetado en un archivo
.sublime-package
, instale
PackageResourceViewer
través de Package Control.
Use la opción "Abrir recurso" en la Paleta de comandos para elegir archivos individuales, o "Extraer paquete" (ambos están precedidos por "PackageResourceViewer:", o
prv
usando búsqueda difusa) para extraer un paquete completo a su carpeta
Packages
, a la que se accede seleccionando
Sublime Text → Preferences → Browse Packages…
(solo
Preferences → Browse Packages…
en otros sistemas operativos).
Se encuentra en su disco duro en la siguiente ubicación:
-
Linux:
~/.config/sublime-text-3/Packages
-
OS X:
~/Library/Application Support/Sublime Text 3/Packages
-
Instalación regular de Windows:
C:/Users/ YourUserName /AppData/Roaming/Sublime Text 3/Packages
-
Instalación portátil de Windows:
InstallationFolder /Sublime Text 3/Data/Packages
Una vez que los archivos se guardan en la carpeta
Packages
(si solo los ve a través de la opción "Abrir recurso" y los cierra sin cambiarlos o guardarlos, no se guardarán),
.sublime-package
el archivo de nombre idéntico contenido en
.sublime-package
archivos
Entonces, por ejemplo, si desea editar el
Python.sublime-build
predeterminado
Python.sublime-build
en el paquete
Python
, sus cambios se guardarán como
Packages/Python/Python.sublime-build
, y cuando elija el sistema de compilación
Python
en el menú , solo usará tu versión.
Tenga en cuenta que si usa venv con S3, deberá actualizar el archivo de recursos Python + Virtualenv.sublime-build.
{
"target": "virtualenv_exec",
"shell_cmd": "python -u /"$file/"",
"file_regex": "^[ ]*File /"(...*?)/", line ([0-9]*)",
"selector": "source.python",
"env": {"PYTHONIOENCODING": "utf-8"}
}