2009-07-29 11 views
1

Ich portiere eine Anwendung von ispapi (pageproducers) von Delphi 7 nach Delphi 2009, die Seiten basieren auf HTML-Dateien in UTF8.delphi 2009 unicode + ansi problem

Alles geht gut, außer wenn Onhtmltag gefeuert wird und ich ein transparentes Tag durch irgendeinen Wert mit Sonderzeichen wie Akzentbuchstaben (áé ...) ersetze Diese Zeichen werden in der Ausgabe durch ein ersetzt.

Was ist los?

Antwort

4

Als Teil Ihres Debugging-Verfahrens sollten Sie herausfinden, welche Bytewerte der Browser für das Fragezeichen 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 den Typ Utf8String ein, aber Delphi 2009 hat diesen Typ speziell gemacht. Wenn Sie diesen Typ nicht zum Halten von Zeichenfolgen verwenden, die als UTF-8 codiert sind, sollten Sie damit beginnen. Werte, die in Utf8String Variablen gespeichert sind, werden automatisch in UnicodeString Werte konvertiert, wenn Sie einander zuweisen.

Wenn Sie Ihre UTF-8-codierten Zeichenfolgen in gewöhnlichen Variablen speichern, werden sie unter Verwendung der Standardsystemcodeseite in Unicode konvertiert, wenn Sie sie einer UnicodeString zuweisen. Das ist nicht was du willst.

Wenn Sie UTF-8-codierte Literale Variablen vom Typ string zuweisen, stoppen Sie das. Dieser Typ erwartet, dass seine Werte als UTF-16 codiert werden, genau wie WideString immer hat.

Wenn Sie Ihre Dateien in einen TStrings Nachkommen mit LoadFromFile laden, müssen Sie den zweiten Parameter der Methode verwenden, der angibt, welche Kodierung verwendet werden soll. UTF-8-kodierte Dateien sollten TEncoding.UTF8 verwenden. Der Standardwert ist TEncoding.Unicode, was Little-Endian-UTF-16 ist.

+0

+1, wünschte, ich könnte +2 geben. Kompakt und informativ. – Argalatyr

+0

Dank Rob, der letzte Absatz ist genau die Lösung für mein Problem. –

+0

Eigentlich war es Delphi 6, das UTF8String einführte. –

0

Dies ist wahrscheinlich ein Zeichencodierungsproblem.

Die Delphi-IDE verwendet normalerweise Windows-1252 oder UTF-16 zum Codieren von Quellcode. HTML verwendet oft UTF-8.

Sie benötigen wahrscheinlich eine Transliteration zwischen diesen Kodierungen. Dafür müssen Sie herausfinden, welche Kodierungen genau verwendet werden (wie Rob erwähnt).

Oder zufällt akzentuierte Zeichen in HTML zu entkommen (wie Ralph Nennungen)

Können Sie sich eine kleine App veröffentlichen, die das Problem zeigt? (Sie können mir eine E-Mail senden, über alles, was Jeroen in den Benutzernamen und Pluimers.com im Domain-Namen hat, wird in meinem Postfach ankommen).

--jeroen

0

Vielen Dank für Ihre Hilfe, nachdem einige Test das Problem sehr sehr einfach war (oder dumm auch)

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

Keine Notwendigkeit, manuell zwischen UnicodeString- UTF8String Ansistring Wide zu übersetzen. Delphi 2009 String-Nutzung ist nahezu perfekt.