В рамках процедуры отладки вы должны выяснить, какие именно байтовые значения получаются браузером за знак вопроса.
Как вы должны знать, тип строки Delphi 2009 - Unicode, тогда как все предыдущие версии были ANSI. В Delphi 7 появился тип Utf8String
, но в Delphi 2009 этот тип стал особенным. Если вы не используете этот тип для хранения строк, закодированных как UTF-8, то вам следует начать это делать. Значения, содержащиеся в Utf8String
переменных, будут автоматически преобразованы в UnicodeString
значения при назначении одного другому.
Если вы храните строки в кодировке UTF-8 в обычных переменных AnsiString
, они будут преобразованы в Unicode с использованием системной кодовой страницы по умолчанию, если вы назначите их UnicodeString
. Это не то, что вы хотите.
Если вы присваиваете литералы в кодировке UTF-8 переменным типа string
, остановите это. Этот тип ожидает, что его значения будут закодированы как UTF-16, как всегда WideString
.
Если вы загружаете свои файлы в потомок TStrings
с LoadFromFile
, то вам нужно начать использовать второй параметр этого метода, который сообщает ему, какую кодировку использовать. Файлы в кодировке UTF-8 должны использовать TEncoding.UTF8
. По умолчанию TEncoding.Unicode
, что является UTF-16 с прямым порядком байтов.