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.
+1, wünschte, ich könnte +2 geben. Kompakt und informativ. – Argalatyr
Dank Rob, der letzte Absatz ist genau die Lösung für mein Problem. –
Eigentlich war es Delphi 6, das UTF8String einführte. –