Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/06/2009, 06:28
chikymb
 
Fecha de Ingreso: junio-2009
Mensajes: 2
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: SQLite y Unicode

Buenas he solucinado el problema de una forma un tanto bruta, pero en fin al no ser muchos datos funiciona.

He escrito dos funciones, una que pasa los caracteres extraños a Á á etc y otra que pasa los acentos a cartacteres extraños para hacer comparaciones con la BD

al parecer los caracteres con acentos los dibide en en 2 char, y el primero siempre es à así que me ayudo de esto para hacer las comprobaciones.

// Á á É é Í Ã* Ó ó Ú ú Ñ ñ Ü ü
// Á á É é Í í Ó ó Ú ú Ñ ñ Ü ü
char * CUtilString::ConvertStringToCharUnicode(CString strString)
{
char *cadena;

cadena = (char *)malloc(strString.GetLength()*sizeof(char)+1);
int i = 0, z = 0;
for( i = 0; i < strString.GetLength();i++)
{
if ((char)strString.GetAt(i) == 'Ã'){
i++;
if ((char)strString.GetAt(i) == '')
cadena[z] = 'Á';
else if((char)strString.GetAt(i) == '¡')
cadena[z] = 'á';
else if((char)strString.GetAt(i) == '‰')
cadena[z] = 'É';
else if((char)strString.GetAt(i) == '©')
cadena[z] = 'é';
else if((char)strString.GetAt(i) == '')
cadena[z] = 'Í';
else if((char)strString.GetAt(i) == '*')
cadena[z] = 'í';
else if((char)strString.GetAt(i) == '“')
cadena[z] = 'Ó';
else if((char)strString.GetAt(i) == '³')
cadena[z] = 'ó';
else if((char)strString.GetAt(i) == 'š')
cadena[z] = 'Ú';
else if((char)strString.GetAt(i) == 'º')
cadena[z] = 'ú';
else if((char)strString.GetAt(i) == '‘')
cadena[z] = 'Ñ';
else if((char)strString.GetAt(i) == '±')
cadena[z] = 'ñ';
else if((char)strString.GetAt(i) == 'œ')
cadena[z] = 'Ü';
else if((char)strString.GetAt(i) == '¼')
cadena[z] = 'ü';
}
else
cadena[z] = (char)strString.GetAt(i);

z++;
}
cadena[z] = NULL;

return cadena;
}

//Á á É é Í Ã* Ó ó Ú ú Ñ ñ Ü ü
// Á á É é Í í Ó ó Ú ú Ñ ñ Ü ü
char * CUtilString::ConvertStringToUTF8Char(CString strString)
{
char *cadena;

cadena = (char *)malloc(strString.GetLength()*sizeof(char)+1);
int i = 0, z = 0;
for( i = 0; i < strString.GetLength();i++)
{
if ((char)strString.GetAt(i) == 'Á'){
cadena[z] = 'Ã';
z++;
cadena[z] = '';
}
else if((char)strString.GetAt(i) == 'á'){
cadena[z] = 'Ã';
z++;
cadena[z] = '¡';
}
else if((char)strString.GetAt(i) == 'É'){
cadena[z] = 'Ã';
z++;
cadena[z] = '‰';
}
else if((char)strString.GetAt(i) == 'è'){
cadena[z] = 'Ã';
z++;
cadena[z] = '©';
}
else if((char)strString.GetAt(i) == 'Í'){
cadena[z] = 'Ã';
z++;
cadena[z] = '';
}
else if((char)strString.GetAt(i) == 'í'){
cadena[z] = 'Ã';
z++;
cadena[z] = '*';
}
else if((char)strString.GetAt(i) == 'Ó'){
cadena[z] = 'Ã';
z++;
cadena[z] = '“';
}
else if((char)strString.GetAt(i) == 'ó'){
cadena[z] = 'Ã';
z++;
cadena[z] = '³';
}
else if((char)strString.GetAt(i) == 'Ú'){
cadena[z] = 'Ã';
z++;
cadena[z] = 'š';
}
else if((char)strString.GetAt(i) == 'ú'){
cadena[z] = 'Ã';
z++;
cadena[z] = 'º';
}
else if((char)strString.GetAt(i) == 'Ñ'){
cadena[z] = 'Ã';
z++;
cadena[z] = '‘';
}
else if((char)strString.GetAt(i) == 'ñ'){
cadena[z] = 'Ã';
z++;
cadena[z] = '±';
}
else if((char)strString.GetAt(i) == 'Ü'){
cadena[z] = 'Ã';
z++;
cadena[z] = 'œ';
}
else if((char)strString.GetAt(i) == 'ü'){
cadena[z] = 'Ã';
z++;
cadena[z] = '¼';
}
else
cadena[z] = (char)strString.GetAt(i);

z++;
}
cadena[z] = NULL;

return cadena;
}