Pues en Delphi (no sé en Lazarus) cuenta una unidad llamada HTTPApp, y una de sus funciones es HTMLDecode que decodifica las entidades html como el ejemplo que mencionaste de trámite, y para el segundo ejemplo Lazarus cuenta con Utf8ToAnsi, pruebalo.
Saludos.
Pues la verdad amigo, ya me hace dudar que es lo que está pasando... O si es que el paso de UTF8 a ANSI resolverá el problema.
El caso al menos que he visto con el ejemplo es puntualmente con la Ñ, que en el código HTML devuelvo por el TidHTTP en lugar se der Ñ es simplemente el signo de cierre de pregunta (es decir ?). Lo vi porque el texto que estuve leyendo es un apellido con Ñ.
Procedo a explicar lo que hice:
Tengo una app en pruebas, e implementé este código entre mis tantas pruebas:
procedure TForm1.Button13Click(Sender: TObject);
var param, html1, html2: TStringList;
encode: string;
begin
param := TStringList.Create;
html1 := TStringList.Create;
param.Add(XXX); // no puedo dar detalles
param.Add(XXX); // de los parámetros
param.Add(XXX); // por cuestiones de seguridad
html1.Text := idHTTP1.Post(MYURL, param);
encode := GuessEncoding(html1.Text);
if encode <> EncodingUTF8
then begin
html2 := TStringList.Create;
html2.Text := ConvertEncoding(html1.Text, encode, EncodingUTF8);
html2.SaveToFile(MYARCHIVO);
ShowMessage('Se ha convertido a UTF8');
FreeAndNil(html2);
else begin
html1.SaveToFile(MYARCHIVO);
ShowMessage('El html de origen es UTF8');
freeAndNil(param);
freeAndNil(html1);
En mi prueba lo que hago es evaluar si ya de por si el contenido HTML devuelto por el TidHTTP es UTF8, de no serlo lo convierto. La prueba hecha en Windows es que efectivamente ya está en UTF8.
Luego abriendo el archivo y explorando noté que entre el contenido que me interesa recuperar, en una ocasión aparece la famosa ? Pero si navego el sitio con cualquier navegador muestra la Ñ. Me dije "bueno, si veo el código fuente que genera el navegador (probé con FF y Chome )quizá también vea ese símbolo de pregunta" pero no... me lo muestra como Ñ.
En FF es posible establecer el tipo de codificación al mostrar el fuente... asi que probé tanto en unicode como en occidental y ni caso... muestra Ñ. Sólo el componente TIdHTTP me pone en lugar de la Ñ el signo de pregunta.
Esta es una muestra de lo que regresa justamente el componente (TidHHTP) para el caso de la Ñ:
<td align="center" bgColor="ghostwhite" colspan="5"><b><font face="Arial, Helvetica, sans-serif" size="1" > VILLAFA?E BLANCA
</font> </b></td>
Pero como pueden ver, a otras entidades lo muestra como &algo:
<td align="center" bgColor="gray"><font color="#FFFFFF" size="1" face="Arial, Helvetica, sans-serif">C
ódigo
</font></td>
<td align="center" bgColor="gray"><font face="Arial, Helvetica, sans-serif" size="1" color="#FFFFFF">Tipo Tr
ámite
</font></td>
El sitio en cuestión está definido como iso-8859-1:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Por eso no se que pensar.
Le daría unos cuantos golpes al que diseñó el sitio, porque se nota que lo hizo tan "caseramente" que tiene algunas faltas de etiquetas que sino fuera porque los navegadores son perfectamente inteligentes y lo corrigen al vuelo el sitio se mostraría una mierda. Pero esto es otro cantar.
Inicialmente pensé en emplear un Parser para hacer todo el trabajo pero me di cuenta justamente que por estos defectos de diseño las cosas no funcionan... además el uso de los parsers que estuve viendo exploran todo, requieren etiquetado completo y no necesito de tanto. Además como lo mio es un trabajo por demanda y necesito consultar varias veces el mismo sitio pero con diferentes parámetros el HTML en si no varía, y sólo me bastaria con detectar los "patrones" de interes y pum... trabajo hecho. Usar el parser me obliga a estar parseando cada vez que se consulta y es una pérdida de tiempo y recursos.
Saludos,