![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
caracteres extraños en mi dbgrid
Hola a todos
Estoy creando una aplicación con C++Builder 6 y SQLite3 usando los componentes de Zeos (geniales porque son gratis y fáciles de usar) Cuando hago consultas a las tablas de mi base de datos, me muestra caracteres raros en lugar de ñ , y/ o vocales con tildes. Me sucede tanto en mi DBGrid como en ComboBoxs. Sin embargo usando la aplicación SQLite Studio, en las consultas sí aparecen las ñ y las vocales con tildes y diérisis (camagüey). He leído que SQLite codifica su Charset con UTF-8. Y la propiedad FONT de los objetos que uso en C++builde6: ZTable,ZQuery, DBGrid, y ComboBox, no traen UTF-8 en su Charset. Cómo puedo solucionar eso? Gracias |
|
#2
|
||||
|
||||
|
¿Has probado a cambiar la codificación de la Base de Datos?
En un visor que yo tengo por aquí (https://sqlitebrowser.org/) aparece esto: ![]() Si realmente UTF8 está codificando como unicode, como aparece en la imagen, el problema es que creo que tu versión (los componentes) que trae no lo soportan.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#3
|
|||
|
|||
|
Si el c++builder6 y los zeoslib 6.6.5 stable no lo soportan, ufff, es un problema. Porque SQLite solo codifica sus tablas con UTF-8 ó UTF-16.
Si pudieras sugerirme alguna alternativa.. Mi aplicación se conecta a una db en mysql (Xampp) y debe hacer salvas locales en una db en sqlite3, que cuando el cliente quiera, las sincronice las dos. Por eso necesito que sea SQLite3. El C++Builder6 no es negociable, o sea no lo puedo cambiar. No hay algún truco? Tal vez accediendo directamente a los campos (TField) con OnGetText. Lo que sucede es que por lo menos en el builder 6 no aparece el TField como un componente que se pueda usar fácilmente. Gracias |
|
#4
|
|||
|
|||
|
una posible alternativa si no tienes UTF-8 en los componentes seria codificar las cadenas con caracteres de tabla ASCII que tiene acentos, Ñ etc
quizas si usas estos componentes?? La version Standard cuesta 329$ ![]() ![]() https://www.devart.com/unidac/#:~:te...20a%20powerful Última edición por navbuoy fecha: 01-10-2024 a las 21:02:59. |
|
#5
|
|||||
|
|||||
|
le pregunte a chatGPT y me dice esto:
Cita:
Código:
ejemplo: ZConnection1->Properties->Values["codepage"] = "UTF8"; Cita:
Cita:
Código:
ZConnection1->Properties->Values["ClientCodepage"] = "UTF8"; Cita:
Código:
ZQuery1->SQL->Text = "INSERT INTO users (name) VALUES ('José Pérez')";
ZQuery1->ExecSQL();
Cita:
Última edición por navbuoy fecha: 01-10-2024 a las 21:12:55. |
|
#6
|
|||
|
|||
|
Solucionado
Gracias Neftalí.
En ocasiones, la vía más fácil es preguntar a quienes tienen más experiencia en determinado tema. Por eso acudo a este foro del cual soy miembro desde hace algún tiempo. Es muy cierto que los componentes que uso no soportan UTF8. Me puse a rebuscar en la ayuda del c++builder6 y existen varias funciones de conversión dentro de la categoría character set conversions y encontré una: UTF8Decode, la cual hace el trabajito de conventir de UTF8 a AnsiString pero me apareció otro problema, y es que al convertir a AnsiString el resultado lo guardo en un ComboBox, que antes, en su evento OnChange usaba el texto seleccionado para otra consulta, y ahora no funciona, porque la consulta no devuelve resultados para un Texto AnsiString en una tabla codificada con UTF8. Por suerte también existe UTF8Encode. Entonces aunque parezca una tarea medieval: decodifico el resultado de una consulta para llenar mi 1er ComboBox, y luego el texto seleccionado lo codifico para usarlo en otra consulta, que me devolverá un resultado que deberé decodificar nuevamente para llenar el 2do ComboBox. El 1er ComboBox se llena con los nombres de las provincias de mi país (algunas tienen tildes y diérisis) y al seleccionar una provincia, en el 2do ComboBox aparecen los municipios de esa provincia como resultado de una consulta. (Usando tablas relacionadas obviamente). Actualmente estoy investigando como Decodificar el contenido de mi DBGrid, con su DataSet buscando alguna propiedad que sea String para poder usar UTF8Decode. Una vez más Gracias. |
|
#7
|
|||
|
|||
|
a ver si te sirve este codigo para convertir el AnsiString
Código:
#include <windows.h>
AnsiString AnsiToUTF8(const AnsiString &ansiStr)
{
// Paso 1: Convertir AnsiString a WideString (UTF-16)
WideString wideStr = WideString(ansiStr);
// Paso 2: Calcular el tamaño necesario para la cadena UTF-8
int utf8Len = WideCharToMultiByte(CP_UTF8, 0, wideStr.c_bstr(), -1, NULL, 0, NULL, NULL);
// Paso 3: Asignar un buffer para almacenar la cadena UTF-8
char *utf8Str = new char[utf8Len];
// Paso 4: Convertir la WideString (UTF-16) a UTF-8
WideCharToMultiByte(CP_UTF8, 0, wideStr.c_bstr(), -1, utf8Str, utf8Len, NULL, NULL);
// Convertir el buffer de UTF-8 a AnsiString y liberar el buffer
AnsiString result = utf8Str;
delete[] utf8Str;
return result;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString original = "Hola, mundo! ñáéíóú";
AnsiString utf8Str = AnsiToUTF8(original);
ShowMessage(utf8Str); // Muestra la cadena convertida a UTF-8
}
|
|
#8
|
|||
|
|||
|
Gracias, pero debe ser lo contrario, convertir de UTF8 a AnsiString porque mis componentes no soportan UTF8 en su Charset de su tipo de letra.
Encontré una solución pírrica con UTF8Decode y UTF8Encode para los ComboBox, pero todavía no lo he logrado con el DBGrid. Cómo puedo insertar una imágen aquí? tengo una en una carpeta de mi pc pero al poner la ruta, me sale un icono de una imagen rota, como que no la encuentra. |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Caracteres extraños en un Memo | Sr.Scorpion | Varios | 1 | 23-10-2008 19:54:59 |
| Caracteres extraños en un Memo | Sr.Scorpion | Varios | 6 | 23-10-2008 14:47:05 |
| Caracteres extraños (#$D#$A) | Iuconlas | Varios | 2 | 23-09-2005 17:09:05 |
| caracteres extraños en reportes | Tangela | Conexión con bases de datos | 0 | 21-01-2004 19:56:22 |
| Caracteres extraños | Germi | Conexión con bases de datos | 1 | 14-10-2003 15:26:18 |
|