imprimiendo UTF-8 en Python 3 usando Sublime Text 3

Tengo este código Python3 para intentar leer e imprimir desde un archivo codificado en 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 ejecuto mi código en el terminal con python3.

Mi configuración de construcció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 en 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 la impresión de los caracteres Unicode en la pantalla …

Además, si trato de cambiar esta variable env según el progtwig A python, no se ejecuta en el texto sublime 3, pero el éxito en bash todavía no lo soluciona.

En realidad, la respuesta estaba en la pregunta vinculada en su pregunta: PYTHONIOENCODING debe configurarse en "utf-8" . Sin embargo, dado que OS X es tonto y no recoge las variables de entorno establecidas en la Terminal o mediante archivos .bashrc o similares, esto no funcionará de la manera indicada en la respuesta a la otra pregunta. En su lugar, debe pasar esa variable de entorno a Sublime.

Afortunadamente, los sistemas de comstackció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 los sistemas de comstackción sin el conjunto de opciones "target" . Como se comentó en nuestros comentarios anteriores, indiqué que su progtwig de ejemplo funcionó bien en un archivo de texto codificado en UTF-8 que contiene caracteres no ASCII cuando se ejecuta con ST3 (comstackción 3122) en Linux, pero no con la misma versión que se ejecuta en OS X Todo lo que fue necesario para que se ejecutara fue cambiar el sistema de comstackción para incluir esta línea:

 "env": {"PYTHONIOENCODING": "utf8"}, 

Guardé el sistema de comstackción, presioné ⌘ B y el progtwig 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 seleccionar 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 de Packages , al 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 su carpeta de Packages (si 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 con el mismo nombre que figura en .sublime-package archivo. Entonces, por ejemplo, si desea editar el archivo de Python.sublime-build predeterminado en el paquete de Python , sus cambios se guardarán como Packages/Python/Python.sublime-build , y cuando elija el sistema de comstackción de Python desde el menú , solo utilizará tu versión.

Funciona, gracias, el script completo del sistema de construcción para Sublime Text 3

Herramienta -> Sistema de construcción -> Sistema de nueva construcción

 { "shell_cmd": "python \"$file\"", "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector": "source.python", "env": {"PYTHONIOENCODING": "utf8"} } 

Tenga en cuenta que si usa venv con S3, necesitará 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"} }