# UnicodeDecodeError: 'utf-8' codec

**URL:** <https://pyar.discourse.group/t/unicodedecodeerror-utf-8-codec/442>\
**Category:** Sin categoría\
**Created:** [25 Septiembre, 2020 00:51 UTC](https://pyar.discourse.group/t/unicodedecodeerror-utf-8-codec/442 "2020-09-25T00:51:16Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![luk2009](https://avatars.discourse-cdn.com/v4/letter/l/e9c0ed/32.png) [@luk2009](https://pyar.discourse.group/u/luk2009)\
**Post date:** [25 Septiembre, 2020 00:51 UTC](https://pyar.discourse.group/t/unicodedecodeerror-utf-8-codec/442/1 "2020-09-25T00:51:16Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![ccanepa](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/ccanepa/32/30_2.png) [@ccanepa](https://pyar.discourse.group/u/ccanepa)\
**Post date:** [25 Septiembre, 2020 03:30 UTC](https://pyar.discourse.group/t/unicodedecodeerror-utf-8-codec/442/2 "2020-09-25T03:30:47Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![luk2009](https://avatars.discourse-cdn.com/v4/letter/l/e9c0ed/32.png) [@luk2009](https://pyar.discourse.group/u/luk2009)\
**Post date:** [25 Septiembre, 2020 23:08 UTC](https://pyar.discourse.group/t/unicodedecodeerror-utf-8-codec/442/3 "2020-09-25T23:08:25Z")

</div>

hola  
gracias por responder  
el codigo es de prueba, porque el windows no da error, aunque cambia el resultado de por ejemplo juan peña por juan pe?a.

Este error y que se detenga la ejecucion solo lo da en linux.  
El encoding que tiene la base de datos es ISO8859\_1

```
cur = con.cursor()

```

cur.execute( "select first 13 csid, clientes, telefono from acmsub order by csid ")

row = cur.fetchall()

for csid in row:

```
print(csid)

```

ese es basicamente el codigo de prueba, donde se pide los valores en la consulta sql.

---

<div class="post-metadata">

**Author:** ![ccanepa](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/ccanepa/32/30_2.png) [@ccanepa](https://pyar.discourse.group/u/ccanepa)\
**Post date:** [25 Septiembre, 2020 23:38 UTC](https://pyar.discourse.group/t/unicodedecodeerror-utf-8-codec/442/4 "2020-09-25T23:38:42Z")

</div>

que tal si usas  
for csid in row:  
print(csid.decode(“iso-8859-1”))

si no funca peqá el traceback completo.

---

<div class="post-metadata">

**Author:** ![luk2009](https://avatars.discourse-cdn.com/v4/letter/l/e9c0ed/32.png) [@luk2009](https://pyar.discourse.group/u/luk2009)\
**Post date:** [27 Septiembre, 2020 03:13 UTC](https://pyar.discourse.group/t/unicodedecodeerror-utf-8-codec/442/5 "2020-09-27T03:13:18Z")

</div>

> [@luk2009](#):
>
> ISO8859\_1

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’

---

<div class="post-metadata">

**Author:** ![ccanepa](https://yyz2.discourse-cdn.com/free1/user_avatar/pyar.discourse.group/ccanepa/32/30_2.png) [@ccanepa](https://pyar.discourse.group/u/ccanepa)\
**Post date:** [27 Septiembre, 2020 03:47 UTC](https://pyar.discourse.group/t/unicodedecodeerror-utf-8-codec/442/6 "2020-09-27T03:47:20Z")

</div>

ok, el problema no esta en el print.

Mirando la pagina de pypi para fdb, dice  
"…

- Automatic data conversion from strings on input.
- Automatic input/output conversions of textual data between UNICODE and database character sets.

"

Mirando el ejemplo 2 de la doc de fdb en [https://fdb.readthedocs.io/en/v2.0/getting-started.html#connecting-to-a-database](https://fdb.readthedocs.io/en/v2.0/getting-started.html#connecting-to-a-database)

```auto

```

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  
)

```auto

```

yo probaria a ajustar el param ‘charset’

---

<div class="post-metadata">

**Author:** ![luk2009](https://avatars.discourse-cdn.com/v4/letter/l/e9c0ed/32.png) [@luk2009](https://pyar.discourse.group/u/luk2009)\
**Post date:** [27 Septiembre, 2020 18:48 UTC](https://pyar.discourse.group/t/unicodedecodeerror-utf-8-codec/442/7 "2020-09-27T18:48:38Z")

</div>

funciona perfecto poniendo charset=‘ISO8859\_1’ dentro los parametros de la conexion a la base de datos.

Gracias ccanepa por toda su ayuda
