Codificación erronea en DB

  1. last week

    Cecilio R

    Dec 4 Pre-Release Testers, Xojo Pro

    Hola.
    Tengo una app hecha desde linux. Cuando la ejecuto los acentos y eñes se ver bien, sin problema tanto en linux como raspberry.

    Pero la misma app en windows no se ven los acentos ni las eñes y en su lugar se ven garabatos.

    Al iniciar la app tengo este código que creí solucionaría el problema:

      me.db.SQLExecute("set names utf8 collate utf8_spanish_ci")
      me.db.SQLExecute("set character set utf8")

    ¿ cómo puedo solucionar problema ?

  2. nicolás c

    Dec 4 Pre-Release Testers, Xojo Pro argentina

    hola cecilio. a que base de datos te refieres?

  3. nicolás c

    Dec 4 Pre-Release Testers, Xojo Pro argentina
    Edited last week

    quizas el siguiente link te resulte util--> https://docs.xojo.com/index.php/DefineEncoding

  4. Alberto D

    Dec 4 Pre-Release Testers, Xojo Pro

    No se mucho de base de datos y encoding, tal vez necesitas indicar el Encoding cuando metes o sacas la información de la base de datos también y no sólo decirle a la base el encoding.

  5. Cecilio R

    Dec 5 Pre-Release Testers, Xojo Pro
    Edited last week

    La base de datos es MySql o MariaDB.

    En un listbox ya se ve mal la codificación.

    Si agrego:
    ListBox1.AddRow(rs.Field("Nombre").StringValue.DefineEncoding(Encodings.UTF8))
    Se ve bien.

    Pero me resulta increible tener que hacer el .DefineEncoding(Encodings.UTF8) campo por campo, en cada textField y cada columna de cada listbox.

    ¿ No hay una forma de definirlo para toda la App ?

  6. Alberto D

    Dec 6 Pre-Release Testers, Xojo Pro

    En caso de que exista forma que la base de datos indique que está mandando UTF8, entonces podrías solicitar a Xojo que agregue esa característica de definir el encoding al obtener la información de una base de datos que explícitamente está indicando que es UTF8.

    Me imagino que por el momento, al no revisar si la base de datos indica que el contenido es UTF8, Xojo le da un encoding Nil (puedes revisar mi teoría con el comando Encoding ).

    Veo en el LR que el DefineEncoding no es necesario para los string creados en Xojo porque son creados como UTF8, el problema es cuando se le asigna un string "externo" debe estar cambiando, por lo menos en Windows, de UTF8 a encoding Nil.

    Si pruebas que Linux mantiene el encoding en UTF8 tal vez sea más fácil solicitar a Xojo que haga lo mismo para Windows.

    Nota: no tengo experiencia con Xojo y MySql/MariaDB, por lo que mis ideas de su interacción son sólo teóricas.

  7. 7 days ago

    Cecilio R

    Dec 6 Pre-Release Testers, Xojo Pro

    @Alberto D;Poo En caso de que exista forma que la base de datos indique que está mandando UTF8, entonces podrías solicitar a Xojo que agregue esa característica de definir el encoding al obtener la información de una base de datos que explícitamente está indicando que es UTF8.

    La base de datos usa UTF8 y UTF8_spanish_ci

    Me imagino que por el momento, al no revisar si la base de datos indica que el contenido es UTF8, Xojo le da un encoding Nil (puedes revisar mi teoría con el comando Encoding ).

    ¿ cómo se usaría, tienes un ejemplo sobre base de datos ?

    Si pruebas que Linux mantiene el encoding en UTF8 tal vez sea más fácil solicitar a Xojo que haga lo mismo para Windows.

    ¿ cómo se hace ?

  8. Alberto D

    Dec 6 Pre-Release Testers, Xojo Pro

    Cecilio, no tengo mucha experiencia, así que estas son sólo unas ideas:

    Dim s As String = "Hola"
    Break

    Te vas a revisar s y puedes ver lo siguiente:
    -image-
    Sabiendo que los strings de Xojo son UTF-8, entonces le asignamos a un String un valor de la base de datos, tipo:

    s = rs.Field("Nombre").StringValue
    Break

    Volvemos a revisar el Encoding que tiene. Lo mas probable es que en Windows diga algo diferente a UTF-8 y por eso sea que no se ven correctamente las letras con acentos. Revisas lo mismo en Linux y ves si el encoding es el mismo que marca Windows. Si de casualidad marca UTF-8 en Linux y no en Windows, se puede pedir a Xojo que homologue la función de Linux con Windows (también sería bueno probarlo en Mac si es que tienes acceso).

    Nota: me imagino que hay mejores formas de hacer lo anterior. Espero que te ayude esto. Saludos.

  9. 6 days ago
  10. Javier M

    Dec 7 Pre-Release Testers, Xojo Pro AprendeXojo - Europe, Spain

    Hola Cecilio,

    Es raro porque si los contenidos están correctamente codificados en la base de datos y recuperados, deberían de verse sin mayor problema. ¿Haces el default_charset = "utf-8"; o el ""SET NAMES 'UTF8'" " justo después de abrir la base de datos? (sólo SET NAMES 'UTF8'" sería preferible… para no resetear la conexión y devolverla a su estado original…

    Javier

  11. Cecilio R

    Dec 7 Pre-Release Testers, Xojo Pro

    Hola Javier.

    Uso solo esto:
    me.db.SQLExecute("set names utf8 collate utf8_spanish_ci")
    me.db.SQLExecute("set character set utf8")

    ¿ Qué debería agregar más ?

or Sign Up to reply!