Domanda

Sto eseguendo il porting di un'applicazione isapi (pageproducers) da delphi 7 a delphi 2009, le pagine sono basate su file html in UTF8.

Tutto va bene tranne quando Onhtmltag viene attivato e sostituisco un tag trasparente con qualsiasi valore con caratteri speciali come caratteri accentati (áé ...) Quei caratteri vengono sostituiti nell'output con un & # 65533; carattere.

Cosa c'è che non va?

È stato utile?

Soluzione

Come parte della procedura di debug, dovresti scoprire esattamente quali valori di byte il browser riceve per il carattere del punto interrogativo.

Come dovresti sapere, il tipo di stringa di Delphi 2009 è Unicode, mentre tutte le versioni precedenti erano ANSI. Delphi 7 ha introdotto il tipo Utf8String , ma Delphi 2009 ha reso quel tipo speciale. Se non stai usando quel tipo per contenere stringhe codificate come UTF-8, allora dovresti iniziare a farlo. I valori contenuti nelle variabili Utf8String verranno convertiti automaticamente in UnicodeString quando si assegnano uno all'altro.

Se stai memorizzando le tue stringhe con codifica UTF-8 nelle normali variabili AnsiString , verranno convertite in Unicode utilizzando la tabella codici di sistema predefinita se le assegni a UnicodeString . Non è quello che vuoi.

Se stai assegnando valori letterali con codifica UTF-8 a variabili di tipo string , interrompi ciò. Questo tipo si aspetta che i suoi valori vengano codificati come UTF-16, proprio come ha sempre fatto WideString .

Se stai caricando i tuoi file in un discendente TStrings con LoadFromFile , allora devi iniziare a usare il secondo parametro di quel metodo, che gli dice quale codifica usare. I file con codifica UTF-8 devono utilizzare TEncoding.UTF8 . L'impostazione predefinita è TEncoding.Unicode , che è little-endian UTF-16.

Altri suggerimenti

Questo è probabilmente un problema di codifica dei caratteri.

L'IDE Delphi di solito utilizza Windows-1252 o UTF-16 per codificare il codice sorgente. HTML utilizza spesso UTF-8.

Probabilmente avrai bisogno di una traslitterazione tra quelle codifiche. Per questo è necessario scoprire quali codifiche vengono utilizzate esattamente (come menzioni Rob ).

O ripristina l'HTML che sfugge ai caratteri accentati (come Ralph menzioni)

Puoi pubblicare una piccola app che mostra il problema? (puoi inviarmi un'e-mail su tutto ciò che ha jeroen nel nome utente e pluimers.com nel nome del dominio arriverà nella mia casella di posta).

- Jeroen

Grazie per l'aiuto, dopo alcuni test il problema è stato molto semplice (o anche stupido)

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

Non è necessario tradurre manualmente tra unicodestring utf8string e la risposta di widestring. L'utilizzo delle stringhe Delphi 2009 è quasi perfetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top