• Publicidad

invalid byte sequence for encoding "UTF8": 0xd3 0x4e

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

invalid byte sequence for encoding "UTF8": 0xd3 0x4e

Notapor seafree » 2020-09-28 15:06 @671

Buenas tardes, al grabar registro en PostgreSQL envía el error:

DBD::Pg::st execute failed: ERROR: invalid byte sequence for encoding "UTF8": 0xd3 0x4e

He intentado corregirlo pero no encuentro la manera, el CGI está recibiendo variables vacías, lo cual es correcto pero al momento de ejecutar el SQL, PostgreSQL convierte los valores a NULL por lo que PostgreSQL envía el error mostrado anteriormente.

¿Qué puedo hacer?

Gracias.
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Publicidad

Re: invalid byte sequence for encoding "UTF8": 0xd3 0x4e

Notapor explorer » 2020-09-28 17:15 @760

Pero ¿es a la hora de guardar datos en la base de datos o leer datos de la base de datos?

Este tipo de errores indican un problema de codificación entre la fuente y el destino.

«Si necesita almacenar datos UTF8 en su base de datos, necesita que la base de datos que acepte UTF8. Puede comprobar la codificación de su base de datos con pgAdmin. Pulse con el botón derecho sobre la base de datos, y seleccione "Propiedades".».
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: invalid byte sequence for encoding "UTF8": 0xd3 0x4e

Notapor seafree » 2020-09-29 09:16 @427

explorer escribiste:Pero ¿es a la hora de guardar datos en la base de datos o leer datos de la base de datos?

Es al momento de guardar los datos.

explorer escribiste:Este tipo de errores indican un problema de codificación entre la fuente y el destino.

«Si necesita almacenar datos UTF8 en su base de datos, necesita que la base de datos que acepte UTF8. Puede comprobar la codificación de su base de datos con pgAdmin. Pulse con el botón derecho sobre la base de datos, y seleccione "Propiedades".».

Realicé la comprobación directamente en PostgreSQL:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
postgres=# show server_encoding;
server_encoding
-----------------
UTF8
(1 row)

postgres=# show client_encoding;
client_encoding
-----------------
UTF8
(1 row)

postgres=# select * from information_schema.character_sets;
character_set_catalog | character_set_schema | character_set_name | character_repertoire | form_of_use | default_collate_cata
log | default_collate_schema | default_collate_name
-----------------------+----------------------+--------------------+----------------------+-------------+---------------------
----+------------------------+----------------------
| | UTF8 | UCS | UTF8 | postgres
| |
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


En el programa Perl que guarda los valores existe la siguiente referencia al UTF8:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Encode;
  2. use utf8;
  3. use CGI qw(:standard);
  4. binmode STDOUT, ":utf8";
  5. use diagnostics;
  6. print $cgi->header(
  7. -type => 'text/html',
  8. -charset => 'utf-8',
  9. );
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Cabe mencionar que el error se genera por que se reciben dos valores vacíos que al momento de ejecutar el SQL se ponen como NULL.


La consulta de las propiedades desde el PGADMIN se muestran en el anexo.

Gracias, explorer.
Adjuntos
pgadmin_properties.PNG
pgadmin_properties.PNG (18.95 KiB) Visto 4120 veces
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Re: invalid byte sequence for encoding "UTF8": 0xd3 0x4e

Notapor explorer » 2020-09-29 15:48 @700

En ese trozo de código sólo veo que se carga Encode, pero no veo cómo lo usas.

El error se produce porque la base de datos espera una codificación en UTF8, y no es eso lo que recibe. Encuentra texto mal codificado o no está en UTF8.

Entonces, DEBES convertir el texto a UTF8 ANTES de grabarlo a la base de datos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: invalid byte sequence for encoding "UTF8": 0xd3 0x4e

Notapor seafree » 2020-09-30 10:15 @469

Buenos días, ¿cómo se convierte el texto a UTF8 ANTES de grabarlo a la base de datos PostgreSQL?

El script había estado funcionando bien, no entiendo qué pasó.
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Re: invalid byte sequence for encoding "UTF8": 0xd3 0x4e

Notapor explorer » 2020-09-30 11:37 @526

El módulo Encode trae una serie de funciones.

Lo primero que tienes que averiguar es qué codificación recibes la información. Quizás esa sea la razón de por qué ahora se comporta de otra manera.

Luego llamas a decode() para que convierta la entrada en codificación interna de Perl:

$string = decode("iso-8859-1", $bytes); # decodifica los $bytes que están en "iso-8859-1", a la cod. interna de Perl

Luego, cuando quieras guardar la cadena en la base de datos, primero la pasamos a utf8:

$bytes = encode_utf8($string); # codifica a utf8

Y ahora ya puedes pasarlo a la base de datos.

Si entre las dos funciones no haces ninguna transformación del $string, podrás reducir las dos llamadas a una sola:

$cuantos = from_to($bytes, "iso-8859-1", "utf8", 1); # transforma $bytes de una codificación a otra

Mira esta receta: post30778.html#p30778
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: invalid byte sequence for encoding "UTF8": 0xd3 0x4e

Notapor seafree » 2020-09-30 15:37 @692

Gracias.
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados