Hello Anxo,
Thursday, August 5, 2010, 9:31:02 PM, you wrote:
AV> a:=UTF8ToISO_8859_1('Ñ')[1];
AV> Edit1.Text:=IntToStr(Length(a)); //debería ser 1
AV> b:=ISO_8859_1toUTF8(a);
AV> Edit2.Text:=IntToStr(Length(b)); //debería ser 2
AV> Edit3.Text:=ISO_8859_1toUTF8(a); //Debería poner una Ñ
AV> escrito por ti y editado con Kwrite lo confirma.
AV> He probado:
Bueno, al pasarlo por KWrite o lo que sea te puede haber grabado la "�" (bueno, a ti te sale en el email una A con ~ arriba) en codepage o en UTF8, eso a la hora de generar c�digo es un problema, por que los literales no sabes como los est� codificando el editor, por lo tanto o bien miras con un editor hexadecimal como lo graba tu editor o bien usas charcodes "#" en el c�digo.
AV> tmp := UTF8ToISO_8859_1('�')[1];
AV> a_mayu[20] := tmp[1];
AV> Label1.Caption:=UTF8ToAnsi('�')[1];
AV> Label5.Caption:=tmp;
AV> Label38.Caption:=AnsiToUTF8('�')[1];
AV> Label39.Caption:=ISO_8859_1ToUTF8('�')[1];
Reemplacemos las '�' por charcodes y te olvidas del problema :)
Label39.caption:=ISO_8859_1ToUTF8(#$D1);
Deber�a salirte una � en el 39.
AV> Siempre el mismo resultado: �� Mi rectangulo favorito !!.
No he probado, pero casi seguro que no ;)
AV> Hice un dpkg-reconfigure locales y prob� varias combinaciones, finalmente AV> dej�:
AV> *es_ES ISO-8859-1* y *es_ES.UTF8 UTF8*
AV> Lo m�ximo que consegu� fu� sustituir mi cuadradito por una interrogaci�n.
Usa siempre el segundo, te evitar�s problemas.
AV> Efectivamente la aplicaci�n es para el GUI.
AV> No entiendo muy bien por que dices que no deber�a usar codepages, yo no AV> conozco otra manera m�s sencilla de generar el alfabeto castellano que con: AV> *for car := 'A' to 'Z' do*
AV> Si la hay me gustar�a conocerla.
No es cuesti�n de sencillez, si no de funcionamiento. Tu programa (el que sea) te funcionar� bien donde usen codepages ISO8859-1, o sea, buena parte de Europa y creo que toda sudam�rica, pero en el resto de paises ver�n cosas raras en vez de '�' o letras acentuadas, y lo que es peor, en algunos casos ver�n letras diferentes.
Con UTF8 (Unicode) no pasa eso, ya que hay definidos unos 13 millones de letras de pr�cticamente todos los idiomas del mundo (si el que te gusta no est� incluido, hay un espacio reservado para especiales como el Klingon de Star Trek).
El problema con el Unicode es que para manejar car�cter a car�cter necesitas 32 bits por letra, lo que es un desperdicio de espacio brutal, as� que se suele usar el UTF-16 o UTF-8, el primero usa 2 bytes para las primeras 60000 letras y el resto que son raras usa una composici�n de otros 2 bytes. El UTF8 usa 1,2,3 o 4 bytes, y es un poco complicada de usar car�cter a car�cter sin unas bibliotecas de manejo, pero es lo que m�s se parece a codepage.
Lazarus y la LCL trabajan exclusivamente en UTF8, por eso tienes que darle las letras en UTF8 o si no te salen cuadraditos.
Tienes de desechar la idea de que una letra es un byte, una letra es una secuencia de bytes de longitud indeterminada (una string) y usarlas de ese modo para que las cosas funcionen de un modo internacional sin problemas. Yo hace ya 3 a�os que s�lo trabajo con UTF8 de modo exclusivo.
Best regards,
Jos�