Hola
Estoy haciendo unas pruebas en la distro kde neon con python
y cuando hago una consulta que incluye caracteres como la ñ
me sale el siguiente error:
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xd1 in position 7: invalid continuation byte
Si la consulta no devuelve algun nombre con ese caracter, todo sale bien.
podria ser algo del sistema operativo o se puede resolver desde python
La consulta esta obteniendo bytes en algun encoding que no es utf-8, en alguna parte hay una conversion a str con el encoding equivocado
Python 3.7.7 (tags/v3.7.7:d7c567b08f, Mar 10 2020, 10:41:24) [MSC v.1900 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> s = "tribilìn"
>>> as_bytes = s.encode("latin1")
>>> z = as_bytes.decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xec in position 6: invalid
continuation byte
>>> as_bytes.decode("latin1")
'tribilìn'
Para resolverlo hay que averiguar cual seria el encoding usado para almacenar los datos y ver de aplicarlo.
La recomendacion usual es que el grueso del codigo trabaje texto, o sea str y hacer conversion a-desde bytes justo cuando haces IO
Traceback (most recent call last):
File “/home/neon/Downloads/prueba_firebird1.py”, line 15, in
row = cur.fetchall()
File “/usr/local/lib/python3.8/dist-packages/fdb/fbcore.py”, line 3807, in fetchall
return [row for row in self]
File “/usr/local/lib/python3.8/dist-packages/fdb/fbcore.py”, line 3807, in
return [row for row in self]
File “/usr/local/lib/python3.8/dist-packages/fdb/fbcore.py”, line 3542, in next
row = self.fetchone()
File “/usr/local/lib/python3.8/dist-packages/fdb/fbcore.py”, line 3759, in fetchone
return self._ps._fetchone()
File “/usr/local/lib/python3.8/dist-packages/fdb/fbcore.py”, line 3412, in _fetchone
return self.__xsqlda2tuple(self._out_sqlda)
File “/usr/local/lib/python3.8/dist-packages/fdb/fbcore.py”, line 2730, in __xsqlda2tuple
value = b2u(value, self.__python_charset)
File “/usr/local/lib/python3.8/dist-packages/fdb/fbcore.py”, line 486, in b2u
return st.decode(charset)
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xd1 in position 7: invalid continuation byte
ese es el traceback de la consulta donde da el error
y este otro es el traceback si pongo lo del decode en el print en la consulta que sale bien con el print sin el decode
Traceback (most recent call last):
File “/home/neon/Downloads/prueba_firebird1.py”, line 20, in
print(csid.decode(‘iso-8859-1’))
AttributeError: ‘tuple’ object has no attribute ‘decode’
con = fdb.connect(
dsn=‘bison:/temp/test.db’,
user=‘sysdba’, password=‘pass’,
dialect=1, # necessary for all dialect 1 databases
charset=‘UTF8’ # specify a character set for the connection
)