Codificacin erronea en DB

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

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

Al iniciar la app tengo este cdigo que cre solucionara el problema:

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

cmo puedo solucionar problema ?

hola cecilio. a que base de datos te refieres?

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

No se mucho de base de datos y encoding, tal vez necesitas indicar el Encoding cuando metes o sacas la informacin de la base de datos tambin y no slo decirle a la base el encoding.

La base de datos es MySql o MariaDB.

En un listbox ya se ve mal la codificacin.

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 ?

En caso de que exista forma que la base de datos indique que est mandando UTF8, entonces podras solicitar a Xojo que agregue esa caracterstica de definir el encoding al obtener la informacin de una base de datos que explcitamente 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 teora 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 ms fcil 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 interaccin son slo tericas.

La base de datos usa UTF8 y UTF8_spanish_ci

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

[quote]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.
[/quote]

¿ cómo se hace ?

Cecilio, no tengo mucha experiencia, as que estas son slo unas ideas:

Dim s As String = "Hola" Break
Te vas a revisar s y puedes ver lo siguiente:

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 funcin de Linux con Windows (tambin sera 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.

Hola Cecilio,

Es raro porque si los contenidos estn correctamente codificados en la base de datos y recuperados, deberan de verse sin mayor problema. Haces el default_charset = “utf-8”; o el ““SET NAMES ‘UTF8’” " justo despus de abrir la base de datos? (slo SET NAMES ‘UTF8’” sera preferiblepara no resetear la conexin y devolverla a su estado original

Javier

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 ?