Carácteres raros en aplicación web

  1. 7 months ago

    Buen día

    Tengo una aplicación web stand alone en xojo 2016 r1 y la base de datos es postgresql 9.6 sobre ubuntu, no podemos determinar cuando el usuario es capaz de ingresar caracteres raros como � Ÿ , la base datos los almacena sin problemas, pero la data esta sucia, luego al querer hacer una migración de estos datos a un sistema desarrollado en Visual Fox, este no puede leer los datos de postgresql "UTF8 no tiene equivalencia en la codificación WIN1252".

    Como evitar el ingreso de caracteres raros en la aplicación web?

    Probé con el siguiente código en el evento Session.open sin resultados
    pasaDB.SQLExecute("set names 'utf8';")

    Antes de grabar almaceno el valor en una variable y luego mando a grabar pero cambia el valor de un carácter raro a "?" la data sigue sucia.
    dim telefono As String = Txttelefono1.Text.ConvertEncoding(Encodings.WindowsANSI)

    Esta corre en chrome en varios sistemas operativos windows desde XP a W10.

    Gracias de antemano por la ayuda

    Saludos
    Mauricio

  2. Javier M

    26 Feb 2019 Pre-Release Testers, Xojo Pro, Third Party Store AprendeXojo - Europe, Spain

    Hola Mauricio,

    La codificación entre la base de datos (definición de las tablas) y la utilizada en tu app Web deben coincidir.
    Si vas a utilizar los datos finalmente (o en la cadena de proceso) como WIN1252, entonces las tablas de PostgreSQL deben tener esta codificación, además de que deberás de convertir la codificación de la entrada del usuario a la misma.

    Para evitar problemas de caracteres raros… ¿estos no se limpian/evitan utilizando los PreparedStatements?

    Javier

  3. Hola Javier.

    La base de datos y las tablas son utf8, mi necesidad es trabajar con este encoding y evitar caracteres raros o que no sean compatibles con WIN1252.

    La aplicación y la base de datos no presentan problemas al ingresar un carácter raro lo acepta y lo graba, sin embargo la data esta sucia y no puedo recuperar la información desde visual foxpro hasta que se limpie la data.

    Que implicaciones tendría implementar en el session.open
    DB.SQLExecute("set names 'utf8';")

    En el caso que el usuario ingrese un carácter raro como lo detecto?
    Como convertir la codificación de la entrada del usuario a la misma (utf8)?

    Saludos.
    Mauricio

  4. Javier M

    27 Feb 2019 Pre-Release Testers, Xojo Pro, Third Party Store AprendeXojo - Europe, Spain

    Si la tabla está estructurada como UTF8, entonces HAS de utilizar de principio a fin la misma codificación.

    Datos introducidos por el usuario -> a UTF8 (por omisión debería de ser esta)
    Cuando grabas estos datos en la tabla -> UTF8
    Cuando los recuperas desde la tabla -> UTF8

    En la aplicación de destino, puedes establecer la conversión desde lo obtenido desde la tabla a la nueva codificación que desees…

    Si los caracteres del paso 1 ya están contaminados… puedes establecer un filtro para "eliminar" los que no desees… Perdona, pero no entiendo muy bien cuando dices que si de entrada ya hay un carácter "raro"… ¿qué entendemos por raro? Qué debería esperar como entrada? Ahí es donde tienes que aplicar el filtrado… no conversiones de codificación, entiendo.

    Si la entrada proviene desde otra base de datos que emplee otra codificación, entonces sí que puedes convertirlos previamente desde la codificación "origen" a "UTF8" -> a tabla UTF8.

    No sé si me explico… (muy pocas horas de sueño hoy)

    Javier

or Sign Up to reply!