Frage

Ich porte eine ISAPI -Anwendung (PageProducers) von Delphi 7 nach Delphi 2009, die Seiten basieren auf HTML -Dateien in UTF8.

Alles läuft gut, außer wenn ONHTMLTAG abgefeuert wird und ich ein transparentes Tag durch einen Wert durch Sonderzeichen wie akzentuierte Zeichen (Áé ...) ersetze. Diese Zeichen werden in der Ausgabe durch einen � -Zeichen ersetzt.

Was ist los?

War es hilfreich?

Lösung

Im Rahmen Ihres Debugging-Verfahrens sollten Sie genau herausfinden, welche Byte-Wert (en) der Browser für den Fragemarktcharakter erhält.

Wie Sie wissen sollten, ist der String -Typ von Delphi 2009 Unicode, während alle früheren Versionen ANSI waren. Delphi 7 führte die vor Utf8String Typ, aber Delphi 2009 hat diesen Typ zu etwas Besonderem gemacht. Wenn Sie diesen Typ nicht zum Halten von Zeichenfolgen verwenden, die als UTF-8 codiert sind, sollten Sie dies tun. Werte in Utf8String Variablen werden auf konvertiert zu UnicodeString Werte automatisch, wenn Sie dem anderen eine zuweisen.

Wenn Sie Ihre UTF-8-kodierten Saiten in gewöhnlich speichern AnsiString Variablen, dann werden sie unter Verwendung der Standard -System -Code -Seite in Unicode konvertiert, wenn Sie sie A zuweisen UnicodeString. Das willst du nicht.

Wenn Sie UTF-8-kodierte Literale zuweisen Variablen vom Typ string, Hör auf damit. Dieser Typ erwartet, dass seine Werte als UTF-16 codiert werden, genau wie WideString immer hat.

Wenn Sie Ihre Dateien in a laden TStrings Nachkommen mit LoadFromFile, Dann müssen Sie den zweiten Parameter dieser Methode verwenden, der ihm mitteilt, welche Codierung verwendet werden soll. UTF-8-kodierte Dateien sollten verwendet werden TEncoding.UTF8. Der Standard ist TEncoding.Unicode, das ist Little-Endian UTF-16.

Andere Tipps

Dies ist wahrscheinlich ein Problem mit Charaktercodierung.

Die Delphi-IDE verwendet normalerweise Windows-1252 oder UTF-16, um den Quellcode zu codieren. HTML verwendet häufig UTF-8.

Sie brauchen wahrscheinlich eine Transliteration zwischen diesen Codierungen. Dafür müssen Sie herausfinden, welche Kodierungen genau verwendet werden (wie wie rauben Erwähnungen).

Oder zu html entkommenden Akzentfiguren zurückkehren (wie wie Ralph Erwähnungen)

Können Sie eine kleine App veröffentlichen, die das Problem anzeigt? (Sie können mir eine E -Mail senden, was Jeroen im Benutzernamen und pluimers.com im Domainnamen in meinem Mailbox ankommt.)

-Jeroen

Vielen Dank für Ihre Hilfe. Nach einigen Tests war das Problem sehr sehr einfach (oder auch dumm)

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

Sie müssen nicht manuell zwischen Unicodestring utf8string ansisten Widestring übersetzen. Delphi 2009 String Nutzung ist nahezu perfekt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top