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