• Domingo 22 de Diciembre de 2024, 18:19

Autor Tema:  Caracteres acentuados  (Leído 2849 veces)

jp_lujan

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Caracteres acentuados
« en: Martes 3 de Agosto de 2010, 08:47 »
0
Hola, soy bastante novato en python, necesitaría de ayuda con la siguiente cuestión tengo una tabla en la que en una de las celdas me aparece el Path de un fichero, el programa funciona bién hasta que en ese path aparece un carácter acentuado ya sea mayúscula o minúscula. he puesto el coding en la cabecera pero me sigue sin funcionar.

Dejo el código por si alguien pudiera ayudarme
Código: Python
  1.  
  2. #!/usr/local/bin/python
  3. # -*- coding: utf-8 -*-
  4. import sys
  5. import os
  6. from PyQt4 import QtCore
  7. from PyQt4 import QtGui
  8. from PyQt4 import QtSql
  9. from gui import Ui_MainWindow
  10. class Programa(QtGui.QMainWindow):
  11.     def __init__(self,parent=None):
  12.         QtGui.QWidget.__init__(self,parent)
  13.  
  14.         self.modelo = self.generaModelo()
  15.  
  16.         self.ui = Ui_MainWindow()
  17.         self.ui.setupUi(self)
  18.         self.ui.tabla.setModel(self.modelo)
  19.         self.reajusta()
  20.  
  21.         QtCore.QObject.connect(self.ui.action_Salir, QtCore.SIGNAL("activated()"),QtGui.qApp,QtCore.SLOT("quit()") )
  22.         QtCore.QObject.connect(self.ui.Refrescar, QtCore.SIGNAL("clicked()"),self.refrescar)
  23.  
  24.         QtCore.QObject.connect(self.ui.Nuevalinea, QtCore.SIGNAL("clicked()"),self.nuevaLinea)
  25.  
  26.         QtCore.QObject.connect(self.ui.eliminarLinea, QtCore.SIGNAL("clicked()"),self.eliminarLinea)
  27.         QtCore.QObject.connect(self.ui.abrirDoc, QtCore.SIGNAL("clicked()"),self.abrirDoc)
  28.  
  29.     def generaModelo(self):
  30.          self.conectaDB()
  31.          modelo = QtSql.QSqlTableModel(None,self.db)
  32.          modelo.setTable('accesos')
  33.          modelo.setSort(self.recordPrototipo.indexOf('idAcceso'),
  34.                         QtCore.Qt.AscendingOrder)
  35.          modelo.select()
  36.          return modelo
  37.  
  38.     def conectaDB(self):
  39.          self.db = QtSql.QSqlDatabase.addDatabase('QSQLITE')
  40.          self.db.setHostName('')
  41.          self.db.setDatabaseName('Accesos2.db')
  42.          self.db.setUserName('')
  43.          self.db.setPassword('')
  44.          name = self.db.open()
  45.          query = QtSql.QSqlQuery('select * from accesos',self.db)
  46.          self.recordPrototipo = query.record()
  47.  
  48.     def reajusta(self):
  49.          self.ui.tabla.resizeColumnsToContents()
  50.  
  51.     def nuevaLinea(self):
  52.          fila = self.modelo.rowCount()
  53.          self.modelo.insertRow(fila)
  54.          self.reajusta()
  55.  
  56.  
  57.     def eliminarLinea(self):
  58.         index = self.ui.tabla.currentIndex()
  59.         fila = index.row()
  60.         id = self.modelo.data(self.modelo.index(fila, self.recordPrototipo.indexOf('idAcceso'))).toString()
  61.         nombre = self.modelo.data(self.modelo.index(fila, self.recordPrototipo.indexOf('Ruta'))).toString()
  62.  
  63.         if QtGui.QMessageBox.question(self, 'Borrar linea',
  64.         QtCore.QString("¿Desea borrar el producto #%1, #%2?").arg(idAcceso).arg(Ruta),
  65.         QtGui.QMessageBox.Yes|QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes:
  66.                self.modelo.removeRow(fila)
  67.                self.reajusta()
  68.     def refrescar(self):
  69.         self.modelo.select()
  70.  
  71.     def abrirDoc(self):
  72.         index = self.ui.tabla.currentIndex()
  73.         fila = index.row()
  74.  
  75. ## La línea donde tiene recogido el PATH, tambien he probado a poner 'u' delante de la cadena
  76.         nombre = self.modelo.data(self.modelo.index(fila, self.recordPrototipo.indexOf ('Ruta'))).toString ()
  77.  
  78.         os.startfile (nombre)
  79.  
  80. if __name__ == '__main__':
  81.     app = QtGui.QApplication (sys.argv)
  82.     myapp = Programa()
  83.     myapp.show()
  84.     sys.exit(app.exec_())
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  

Zyntaxis

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Caracteres acentuados
« Respuesta #1 en: Martes 3 de Agosto de 2010, 22:02 »
0
Perdona ya se que no tiene nada que ver pero ¿como has hecho para poner el codigo de esa manera?

Saludos y espero que alguien te ayude

jp_lujan

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Caracteres acentuados
« Respuesta #2 en: Miércoles 4 de Agosto de 2010, 08:14 »
0
No entiendo lo que quieres decir

rive08

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Caracteres acentuados
« Respuesta #3 en: Miércoles 4 de Agosto de 2010, 13:51 »
0
Buen día jp_lujan,
No se si solucionará tu problema, admito que no leí todo tu código, pero, por lo que contás al principio, creo que estás confundiendo un poco las cosas. Con
Cita de: "jp_lujan"
he puesto el coding en la cabecera pero me sigue sin funcionar.
, lo que declaras es el "encoding" de tu "código fuente". . . es decir, estás declarando que en tu código vas a utilizar caracteres NO-ASCII, de acuerdo al encoding declarado. (ejemplo en los comentarios, o en el código podrías utilizar las 'ñ' y los ´)
Para más información, visitar pep-0263 de python.org (todavía no puedo postear urls así que, no te puedo dejar el link :-P)

Ahora bien, para que el intérprete sepa cómo debe tratar tus cadenas de caracteres es otro tema:
Como dije anteriormente, no estoy con mucho tiempo, así que no pude leer tu código, te dejo una receta que dio Iñigo Serna en la lista Python-es sobre este tema:
[lo siguiente es válido para python v2.x, en python v3.x cambia]
 
Trabaja internamente siempre con unicode y cuando tengas que mostrar
algo, codifícalo, p.e. en UTF-8:
 
>>> a = u'eñe'    # fíjate en la u que antecede a la cadena
>>> type(a)
<type 'unicode'>
>>> print a.encode('utf-8')
eñe
>>>

Espero te sirva de algo,
Y, si para el fin de semana todavía no has encontrado tu solución, prometo revisar tu código (no soy más que un principiante en python, pero descubrí que, ayudando a solucionar problemas de los demás, aprendo más que con los libros :-P)

Saludos,
Rive

Zyntaxis

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Caracteres acentuados
« Respuesta #4 en: Miércoles 4 de Agosto de 2010, 23:20 »
0
En poner el código en esa ventanita con el formato de python

jp_lujan

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Caracteres acentuados
« Respuesta #5 en: Viernes 6 de Agosto de 2010, 08:11 »
0
Zyntaxis:
Lo del codigo fue tan sencillo como copiar y pegar el texto, previamente he seleccionado Code=Python en el cuadro de enviar post y he pegado el texto entre los
[ code=python]****pegar texto aquí****[/code ].

Rive08:
Gracias por tu respuesta pero no sé como decodificar la cadena.
Seguiré intentando, de nuevo gracias

Zyntaxis

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Caracteres acentuados
« Respuesta #6 en: Domingo 8 de Agosto de 2010, 00:24 »
0
ok gracias!