Pregunta

Estoy portando una aplicación isapi (pageproducers) de delphi 7 a delphi 2009, las páginas se basan en archivos html en UTF8.

Todo va bien, excepto cuando se activa Onhtmltag y reemplazo una etiqueta transparente con cualquier valor con caracteres especiales como caracteres acentuados (áé ...) Esos caracteres se reemplazan en la salida con un & # 65533; personaje.

¿Qué pasa?

¿Fue útil?

Solución

Como parte de su procedimiento de depuración, debe averiguar exactamente qué valor (es) de bytes recibe el navegador para el carácter de signo de interrogación.

Como debe saber, el tipo de cadena de Delphi 2009 es Unicode, mientras que todas las versiones anteriores eran ANSI. Delphi 7 introdujo el tipo Utf8String , pero Delphi 2009 hizo ese tipo especial. Si no está utilizando ese tipo para mantener cadenas codificadas como UTF-8, entonces debería comenzar a hacerlo. Los valores almacenados en las variables Utf8String se convertirán a los valores de UnicodeString automáticamente cuando asigne uno a otro.

Si está almacenando sus cadenas codificadas con UTF-8 en variables ordinarias AnsiString , se convertirán a Unicode utilizando la página de códigos del sistema predeterminada si las asigna a un UnicodeString . Eso no es lo que quieres.

Si está asignando literales codificados con UTF-8 a variables de tipo string , deténgalo. Ese tipo espera que sus valores se codifiquen como UTF-16, al igual que WideString siempre lo ha hecho.

Si está cargando sus archivos en un descendiente de TStrings con LoadFromFile , entonces debe comenzar a usar el segundo parámetro de ese método, que le indica qué codificación usar. Los archivos codificados con UTF-8 deben usar TEncoding.UTF8 . El valor predeterminado es TEncoding.Unicode , que es little-endian UTF-16.

Otros consejos

Este es probablemente un problema de codificación de caracteres.

El IDE de Delphi generalmente usa Windows-1252 o UTF-16 para codificar el código fuente. HTML a menudo utiliza UTF-8.

Probablemente necesites algo de transliteración entre esas codificaciones. Para eso, debe averiguar qué codificaciones se utilizan exactamente (como Rob menciones).

O revertir a HTML con caracteres acentuados que se escapan (como menciones Ralph )

¿Puedes publicar una aplicación pequeña que muestre el problema? (Puede enviarme un correo electrónico sobre cualquier cosa que tenga jeroen en el nombre de usuario y pluimers.com en el nombre de dominio llegará a mi buzón).

--jeroen

Gracias por su ayuda, después de algunas pruebas, el problema era muy simple (o también estúpido)

response.contenttype := 'text/html charset=UTF-8'

No es necesario traducir manualmente entre unicodesting utf8string ansistring widestring. El uso de cadenas de Delphi 2009 es casi perfecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top