Programación Web y Scripting > Python
Caracteres acentuados
jp_lujan:
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 --- #!/usr/local/bin/python# -*- coding: utf-8 -*-import sysimport osfrom PyQt4 import QtCorefrom PyQt4 import QtGuifrom PyQt4 import QtSqlfrom gui import Ui_MainWindowclass Programa(QtGui.QMainWindow): def __init__(self,parent=None): QtGui.QWidget.__init__(self,parent) self.modelo = self.generaModelo() self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.tabla.setModel(self.modelo) self.reajusta() QtCore.QObject.connect(self.ui.action_Salir, QtCore.SIGNAL("activated()"),QtGui.qApp,QtCore.SLOT("quit()") ) QtCore.QObject.connect(self.ui.Refrescar, QtCore.SIGNAL("clicked()"),self.refrescar) QtCore.QObject.connect(self.ui.Nuevalinea, QtCore.SIGNAL("clicked()"),self.nuevaLinea) QtCore.QObject.connect(self.ui.eliminarLinea, QtCore.SIGNAL("clicked()"),self.eliminarLinea) QtCore.QObject.connect(self.ui.abrirDoc, QtCore.SIGNAL("clicked()"),self.abrirDoc) def generaModelo(self): self.conectaDB() modelo = QtSql.QSqlTableModel(None,self.db) modelo.setTable('accesos') modelo.setSort(self.recordPrototipo.indexOf('idAcceso'), QtCore.Qt.AscendingOrder) modelo.select() return modelo def conectaDB(self): self.db = QtSql.QSqlDatabase.addDatabase('QSQLITE') self.db.setHostName('') self.db.setDatabaseName('Accesos2.db') self.db.setUserName('') self.db.setPassword('') name = self.db.open() query = QtSql.QSqlQuery('select * from accesos',self.db) self.recordPrototipo = query.record() def reajusta(self): self.ui.tabla.resizeColumnsToContents() def nuevaLinea(self): fila = self.modelo.rowCount() self.modelo.insertRow(fila) self.reajusta() def eliminarLinea(self): index = self.ui.tabla.currentIndex() fila = index.row() id = self.modelo.data(self.modelo.index(fila, self.recordPrototipo.indexOf('idAcceso'))).toString() nombre = self.modelo.data(self.modelo.index(fila, self.recordPrototipo.indexOf('Ruta'))).toString() if QtGui.QMessageBox.question(self, 'Borrar linea', QtCore.QString("¿Desea borrar el producto #%1, #%2?").arg(idAcceso).arg(Ruta), QtGui.QMessageBox.Yes|QtGui.QMessageBox.No) == QtGui.QMessageBox.Yes: self.modelo.removeRow(fila) self.reajusta() def refrescar(self): self.modelo.select() def abrirDoc(self): index = self.ui.tabla.currentIndex() fila = index.row() ## La línea donde tiene recogido el PATH, tambien he probado a poner 'u' delante de la cadena nombre = self.modelo.data(self.modelo.index(fila, self.recordPrototipo.indexOf ('Ruta'))).toString () os.startfile (nombre) if __name__ == '__main__': app = QtGui.QApplication (sys.argv) myapp = Programa() myapp.show() sys.exit(app.exec_())
Zyntaxis:
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:
No entiendo lo que quieres decir
rive08:
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.
--- Fin de la cita ---
, 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:
En poner el código en esa ventanita con el formato de python
Navegación
[#] Página Siguiente
Ir a la versión completa