Foros del Web » Programando para Internet » Python »

A mí no me funciona el #-*- coding: utf-8 -*-

Estas en el tema de A mí no me funciona el #-*- coding: utf-8 -*- en el foro de Python en Foros del Web. Estoy leyendo por tutoriales el tema de los acentos y símbolos raros que no admite Python. Y mirando códigos de algunos foreros veo que ponen ...
  #1 (permalink)  
Antiguo 04/12/2011, 12:12
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 12 años, 5 meses
Puntos: 9
A mí no me funciona el #-*- coding: utf-8 -*-

Estoy leyendo por tutoriales el tema de los acentos y símbolos raros que no admite Python. Y mirando códigos de algunos foreros veo que ponen en la primera línea:

#-*- coding: utf-8 -*-

Que según creo es para que admita esos símbolos europeos y no los típicos ASCII. Bueno, yo tengo un windows 7 y poniendo esa línea tampoco me salen bien escritas las cadenas. Parecen jeroglíficos egipcios...jajaja.

Ni me admite signos de admiración, ni acentos, ni eñes y demás símbolos ¿Que hago mal?
  #2 (permalink)  
Antiguo 04/12/2011, 13:03
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 17 años, 2 meses
Puntos: 1360
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

Es por que tu archivo no es utf-8.

Lo que tienes que hacer es averiguar en que codificación estas guardando tu archivo y sustituir utf-8 por esa codificación.

Mi windows 7 dice que de codificación tengo cp1252, pero cualquier editor de texto decente te permite cambiar esto.
  #3 (permalink)  
Antiguo 04/12/2011, 13:37
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 12 años, 5 meses
Puntos: 9
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

Cita:
Iniciado por razpeitia Ver Mensaje
Es por que tu archivo no es utf-8.

Lo que tienes que hacer es averiguar en que codificación estas guardando tu archivo y sustituir utf-8 por esa codificación.

Mi windows 7 dice que de codificación tengo cp1252, pero cualquier editor de texto decente te permite cambiar esto.
Mirando en el notepad me sale que guarda los archivos en formato ANSI. Pero he puesto esto en la primera línea de Python y me da error ???
  #4 (permalink)  
Antiguo 04/12/2011, 15:59
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 17 años, 2 meses
Puntos: 1360
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

Según este tema ansi es un termino generico para el encoding cp1252 o windows-1252
  #5 (permalink)  
Antiguo 10/12/2011, 10:13
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 12 años, 5 meses
Puntos: 9
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

A ver si me aclaro...

Codifico el código con:


# -*- coding: utf-8 -*-

print u"¿Hola, mañana hará frio?"

y se me imprime correctamente. Con acentos y eñes por poner delante de la cadena u de unicode. Si no pongo esa u, me da error. Bien...

Pero con raw_input no me deja hacer lo mismo:

raw_input (u"¿Cómo estas? :")

me da error !!!

¿Que pasa...me deja hacerlo con print y con raw_input no?
  #6 (permalink)  
Antiguo 10/12/2011, 13:12
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 17 años, 2 meses
Puntos: 1360
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

De casualidad estas usando pyscripter?
  #7 (permalink)  
Antiguo 10/12/2011, 14:08
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 12 años, 5 meses
Puntos: 9
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

Cita:
Iniciado por razpeitia Ver Mensaje
De casualidad estas usando pyscripter?
No razpeitia, estoy usando Geany

¡¡¡ Y no me hagas cambiar que ya me he adaptado a él !!!
(Es broma).

No , la verdad es que este editor me gusta. Osea, ¿Que es culpa del editor...?
  #8 (permalink)  
Antiguo 10/12/2011, 14:27
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 17 años, 2 meses
Puntos: 1360
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

PyScripter tenia problemas con el stdin y stdout si no mal recuerdo similares.

Pero se debe a que raw_hace el encoding automáticamente con ascii. Así que no intentes pasarle una cadena unicode con valores fuera del ascii en vez de eso solo pasa la cadena plana.

Código Python:
Ver original
  1. #coding: utf-8
  2. u = u'á'
  3. print u #bien
  4. raw_input(u) #mal va tronar
  5. raw_input('á') #Bien
  #9 (permalink)  
Antiguo 10/12/2011, 21:42
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 13 años, 1 mes
Puntos: 1485
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

¡que tal, gente!

@razpeitia... sabes, para mi esto se me hace muy raro. estoy usando como editor y entorno el Python Shell IDLE para windows. haciendo los tutoriales de maestrosdelweb me fije de una situación particular. en el entorno interactivo -IDLE- me representa bien los caracteres latinos cuando imprime una salida. sin embargo, cuando creo un documento *.py con el editor, IDLE no me representa bien los caracteres latinos. por supuesto, al inicio indique la codificación utf-8. revise en otro editor (notepad++) que realmente el documento esté codificado en dicho charset. incluso con BOM y sin BOM. en las configuraciones generales de IDLE le indique como utf-8 el charset por defecto al decodificar las fuentes. aún así me sigue fallando y no entiendo que esta pasando. como decia al inicio, lo raro es que sucede con archivos pero no con string introducidos directamente en la consola. ¿alguna idea?
¡gracias¡
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #10 (permalink)  
Antiguo 10/12/2011, 22:23
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 17 años, 2 meses
Puntos: 1360
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

Si, te recomiendo correr este script para que veas que codificación esta usando el stdout.

Código Python:
Ver original
  1. import sys
  2. print sys.stdout.encoding

Otra cosa, si la ejecución la estas haciendo en el shell del windows (cmd) te aviso que no tiene soporte para utf-8 (al menos que yo sepa).
  #11 (permalink)  
Antiguo 10/12/2011, 22:38
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 13 años, 1 mes
Puntos: 1485
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

vaya, creo que ya lo voy captando. la verdad que es extraño como python o la consola IDLE maneja el asunto de los charsets. estaba haciendo pruebas con la función decode y me imprimia bien. también me funcionó indicando que la cadena es unicode, u"string". me imaginaba que por defecto la consola codificaba a otro charset pero no estaba seguro. en efecto, sys.stdout.encoding me indica como charset cp1252 (similar a latin-1).

en vista de lo anterior, me surgen otras dudas. la más importante, ¿es un efecto de python o de la consola IDLE? ¿hay alguna forma para que automáticamente reconozca el charset del string según sea el comentario del inicio # -*- coding -*-? u otra forma despues que no sea invocando la función decode o iniciando el string como unicode. pensaba que con solo indicar el charset y codificar el documento era suficiente.

respecto al shell de windows, ya lo conocia. de hecho, ni siquiera lo toco.
¡gracias por aclararme los detalles!

@edit...
Cita:
Iniciado por razpeitia Ver Mensaje
Código Python:
Ver original
  1. #coding: utf-8
  2. u = u'á'
  3. print u #bien
  4. raw_input(u) #mal va tronar
  5. raw_input('á') #Bien

por cierto, intente una cadena unicode en raw_input y al menos a mi no me truena. al contrario, lo muestra correctamente. lo intente tanto directamente en el shell como en un módulo *.py.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 10/12/2011 a las 23:00
  #12 (permalink)  
Antiguo 11/12/2011, 00:06
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 17 años, 2 meses
Puntos: 1360
Respuesta: A mí no me funciona el #-*- coding: utf-8 -*-

Esto del #coding es similar al charset en html.

El html puede tener un enconding por ejemplo cp1252 pero si el charset indica utf-8 entonces vas a ver caracteres extraños.

No hay manera segura o barata de detectar en encoding de un archivo o string, ya que este puede o no tener encoding y si tiene encoding puede tener uno, dos o muchos encodings que los acepte aunque este no tenga caracteres imprimibles.

Al parecer por lo menos para el print a mi me funciona bien cuando hago lo siguiente:

Código Python:
Ver original
  1. #coding: some-encoding
  2. print 'á'
  3. print u'á'
  4. print repr('á')
  5. print repr(u'á')

Por ejemplo en ubuntu 11.10 a mi me imprime correctamente todas las 'á' pero no se si en windows te imprimirá caracteres extraños o te lo imprimirá correctamente. Creo que depende mucho de que consola correrá ese proceso.

Volviendo a lo del html, si mi navegador es un navegador decente y hace el encoding de la pagina de la pagina de acuerdo al charset entonces no creo que exista problema alguno.(Como mi shell en linux)
Pero si tengo un navegador que le tengo que configurar yo el charset para que despliegue bien alguna pagina (como parece ser caso del cmd de windows) entonces te conviene mas usar el cp1252 del windows.

Es lo que yo hacia cuando programaba en windows.

Igual siempre recomiendo esta lectura para mayor entendimiento de los encodings.

Etiquetas: coding, utf-8
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:11.