Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Pasar ANSI a UTF8 (https://www.clubdelphi.com/foros/showthread.php?t=93457)

jocaro 04-10-2018 13:29:43

Pasar ANSI a UTF8
 
Hola.

Tengo una base de datos con la información de las tablas en ANSI, que mantengo a través de una aplicación desarrollada en Delphi XE2.

Voy a intentar pasar la información a unicode UTF8 y estoy buscando información sobre como hacerlo.

¿Debería utilizar la funcion UTF8encode?, ¿solo para strings?, ¿también para campos blob?, ¿es necesario transformar integers, etc. y, si es asi, como hacerlo?.

Cualquier otro comentario que me aclare sobre los conceptos y detalles a tener en cuenta será bien recibido.

Un saludo y gracias por vuestra atención

ecfisa 04-10-2018 15:25:33

Hola.

Como tantos otros, ANSI y UTF-8 son formatos de codificación de caracteres y las conversiones tienen sentido donde haya valores de tipo caracter. Delphi incorpora la función System.AnsiToUtf8 que hace la tarea que buscas.

Tal vez exista alguna función en la BD con que trabajas que realice lo mismo, pero deberías especificar cuál es.

Saludos :)

mamcx 04-10-2018 17:22:31

Para entender todo esto:

https://www.joelonsoftware.com/2003/...ts-no-excuses/

Cita:

Empezado por jocaro (Mensaje 528795)
¿Debería utilizar la funcion UTF8encode?, ¿solo para strings?, ¿también para campos blob?

UTF8 es un super-set de ansi. Eso significa, que a menos que tengas ANSI en un codepage especial (o una cadena malformada, con datos binarios o null), deberia pasar directamente. Sin embargo, usa una funcion como dice eficsa para estar seguros. Eso deberia ser dolor de una sola vez.


Cita:

Empezado por jocaro (Mensaje 528795)
¿también para campos blob?
¿es necesario transformar integers, etc. y, si es asi, como hacerlo?.

Solo para strings. Blobs si y solo si son blobs de string. No pasas a utf8 una imagen jpg!

jocaro 05-10-2018 11:12:43

Ante todo muchas gracias por vuestra ayuda.

Cita:

Tal vez exista alguna función en la BD con que trabajas que realice lo mismo, pero deberías especificar cuál es.
La base de datos es sqlite version 3 y como comentas existe un PRAGMA encoding = 'UTF-8', pero no me queda claro si simplemente cargando datos ANSI a una nueva BD con dicho PRAGMA, éstos se cargarían con formato unicode UTF8. Mientras escribo ésto se me ocurre que puedo probar a pasar toda la información de la base de datos ansi a la UTF y mirar a posteriori si los nuevos códigos de los caracteres son distintos.

Un saludo y gracias de nuevo

Casimiro Notevi 05-10-2018 14:11:33

Ten en cuenta que si no usas ñáéíóú... el resto de caracteres serán iguales en ansi como en utf8.

mamcx 05-10-2018 18:49:04

Cita:

Empezado por jocaro (Mensaje 528825)
Ante todo muchas gracias por vuestra ayuda.

La base de datos es sqlite version 3 y como comentas existe un PRAGMA encoding = 'UTF-8', pero no me queda claro si simplemente cargando datos

Sqlite es un RDBMS muy "barebones", no hace nada automatico y asume que se tiene total control de los datos. Un pragma es un valor en runtime que no altera la BD, solo "declara" una opcion, que tiene efecto a partir de su declaracion.

Con respecto a unicode:

https://stackoverflow.com/questions/...g-unicode-data

Lo que significa que debes manualmente pasar la BD a utf8 si antes todo estaba en ascii.


La franja horaria es GMT +2. Ahora son las 08:41:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi