PDA

Ver la Versión Completa : Conversion de caracteres


jafera
19-06-2013, 18:00:29
Buenas tardes a todos.

Tengo un pequeño problema con la gestión de unos caracteres de un fichero txt que me mandan, el cual debo procesar y cargar en una tabla Firebird 1.5.

Os cuento el detalle, cada semana me envian el susodicho fichero en el que la gente se ha dado de alta y con la normalización lingüística, pues cada vez más gente acentúa sus nombre y apellidos, con esto en el fichero recibo caracteres tales como:

VÖCTOR = VÍCTOR
MU¥OZ = MUÑOZ
MIGUEL µNGEL = MIGUEL ÁNGEL
LLOREN€ = LLORENÇ

Creé la tabla en FB con el character set ISO8859_1 y collate ES_ES luego convertí el archivo txt a csv y desde IBConsole lo cargué sin problemas, son más de 60.000 registros.

En Delphi creé un proceso para llevarlo a la tabla, que es donde trabaja el usuario y cuando encontraba un caracter que no le gustaba, pues mandaba un error y se paraba el proceso.

He recreado la tabla con character set WIN1252 y si me importa el txt correctamente, pero y aquí está la cuestión:

Hay alguna forma de poder traducir los ejemplos anteriores para que queden en su formato correcto?

Que si el sistema encuentra MU¥OZ en el txt me coloque MUÑOZ en la tabla FB pues si luego busco a MUÑOZ, al colocar la Ñ perderá la busqueda ya que este caracter no existe.

O puedo poner algún conversor, no se igual el txt habla alemán o ruso y la tabla está en español (solo por poner un ejemplo).

Esto tendría que ser transparente al usuario ya que no todos pueden usar (ni deben tener acceso a IBConsole) para que no me casquen alguna tabla que la gente aprende a manipular muy facilmente, jejeje y luego nadie ha sido.

Espero me entendais.

Saludos

Josep

Casimiro Notevi
19-06-2013, 19:10:38
Guarda los datos en UTF8

jafera
19-06-2013, 19:25:15
Gracias Casimiro

Tu siempre al rescate de naufragos.

Pero, como lo hago para que sea facil y transparente al usuario?

Si el programa está en la otra punta del pais, y se descarga la base de datos de la Federacion, luego tendrá este txt con caracteres extraños y al importar le petará, por tanto tendría que hacer un proceso, (no se como) para que este txt se guardara en el formato UTF-8 y luego hacer la inserción el la tabla FB, estoy un poco confundido ya que hay situaciones que me superan y esta es una.

Este proyecto lleva aparcado más de 10 meses por este problema y el fin de semana pasado que estuve en un campeonato de España en tierras granadinas vi que debia retomarlo par agilizar el proceso de clasificación de corredores, pero nada de nada otra vez de bruces al suelo y pataleando como un niño.

Por cierto he probado de nuevo con WIN1252 y tampoco los importa todos por ejemplo este š, lo que me hace aun dudar más es que si lo hago sobre IBConsole directamente si los carga todos.

Repito gracias

Josep

Casimiro Notevi
19-06-2013, 19:59:57
Entonces, que yo lo entienda: tú recibes distintos ficheros de texto y que pueden estar en formato iso8859-1, win1252, etc.
Debes importar esos ficheros a tu base de datos, pero no sabes qué formato tiene cada uno.

Lo que no entiendo es lo que explicas del ibconsole.

jafera
19-06-2013, 23:36:48
Gracias de nuevo.

Creo que no me he explicado bien, com decia Jack vamos por partes:

El fichero que recibo siempre es igual, lo único es que no se como está codificado.

El tema de los characer set es que he hecho pruebas creando las tablas con los dos tipos para ver si el problema venia por aquí.

Lo del IBConsole es que hize la importacion directamente desde allí y me importó todos los registros sin problemas tanto creando las tablas con ISO8859_1 como con WIN1252.

Buenas noches

Josep

cointec
20-06-2013, 01:39:54
Hola, creo que el problema no es el conjunto de caracteres que te definas en la base de datos, el problema es que debes leer el archivo de forma correcta en variables string, y luego cuando se almacene en la base de datos se realizará la conversión al conjunto de caracteres de la tabla.

Imagino que cuando lees el archivo y lo muestras en un memo también los visualizas mal. Lo primero que debes hacer creo que es saber en que conjunto de caracteres esta el archivo.

Una vez que sepas el conjunto de caracteres, utiliza ese conjunto para establecer la conexión con la base de datos y podrás guardar los datos en una tabla iso8851_1, ya que Firebird realizara la conversión de un conjunto de caracteres a otro.

La otra opción es convertir los caracteres que leas del archivo del conjunto nativo a iso8850_1 o win1252 y guardarlo en la base de datos con una conexión con el mismo conjunto de caracteres de la base de datos.

Casimiro Notevi
20-06-2013, 11:23:30
El fichero que recibo siempre es igual, lo único es que no se como está codificado.
Entonces pregunta o prueba para saber su codificación y listo, ya siempre usas esa codificación.

jafera
20-06-2013, 17:21:04
Buenas a todos y gracias

Ahora ya he conseguido que se metan los datos en la tabla, (con sus signos raros correspondientes y que no se queje).

Resulta que la base de datos estaba creada con character set WIN1252 y yo creaba las tablas con ISO8859_1.

Estoy a la espera de que los informaticos de la federación puedan indicarme como están codificados los datos ya que la gente se da de alta en internet directamente y no se si usan mysql o algo así.

Os informo cuando disponga de más datos.

Saludos

Josep