python python-3.x utf-8 sublimetext3 sublimetext

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"} }