| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
ZHAX1 Master

Registrado: 09 Mar 2007Mensajes: 191
|
Publicado: Lun 09 Feb, 2009 7:04 pm Asunto: Corrupcion con UnicodeString en b2009 |
|
|
UnicodeString cad1,cad2;
cad1= "caca";
cad1.w_str();
cad1.t_str();
cad1.c_str();
Con este sencillo ejemplo entendereis lo que quiero decir, quizas mas de uno se halla ya enfrentado al problema o se enfrentara en el futuro con lo subyacentes dolores de cabeza.
cad 1 = "caca"; Con esta instruccion asignamos la cadena caca a la clase, y ella sola se apaña, de manera que si inspeccionamos...
cad1.w_str(); //encontramos que en se compone de un array creo que de enteros de la siguiente forma
[0] = 'c' = 0x0063
[1] = 'a' = 0x0061
[2] = 'c' = 0x0063
[3] = 'a' = 0x0061
[4] = '\0' = 0x0000
lo curioso es que en el momento de usar c_str() o t_str() (no se cual es la diferencia), nuestra clase se corrompe y ocurre lo siguiente en .w_str()
y por lo tanto queda corrupta nuestra clase y lo que aparentemente vemos en ella.
[0] = 'c' = 0x6361
[1] = 'a' = 0x6361
[2] = '\0' = 0x0000
sin embargo c_str() y t_str() obtienen
[0] = 'c' = 0x63
[1] = 'a' = 0x61
[2] = 'c' = 0x63
[3] = 'a' = 0x61
[4] = '\0' = 0x00
de manera que la funcion funciona pero corrompe de alguna manera el resultado guardado en la clase, juntando de 2 en 2 bytes los caracteres almacenados.
yo demomento huyo del problema usando AnsiString o copiando los valores en otras variables UnicodeString para no corromper las originales, a parte de eso tambien ocurren otros fenomenos extraños como "cac\x018" cadenas cuyo ultimo caracter se corrompe en ocasiones.
Gracias, saludos y espero que alguien se anime a investigarlo.
https://forums.codegear.com/message.jspa?messageID=38875 |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Lun 09 Feb, 2009 10:28 pm Asunto: |
|
|
No me hagas mucho caso porque no tengo instalado Builder 2009, pero lo que dices me suena a que la clase UnicodeString usó tu cadena inicial como unicode y siempre estuvo corrupta.
Prueba esto:
Pienso que funcionará, pero repito, no me hagas mucho caso, no he podido probarlo.
Saludos. |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 10 Feb, 2009 5:02 am Asunto: |
|
|
O bien usa
| Código: |
cad1 = TEXT("caca"); |
_________________
 |
|
| Volver arriba |
|
 |
ZHAX1 Master

Registrado: 09 Mar 2007Mensajes: 191
|
Publicado: Mar 10 Feb, 2009 9:57 am Asunto: |
|
|
| mira q lo complican. |
|
| Volver arriba |
|
 |
|