Delphi 2009 Unicode + ANSI проблема - PullRequest
1 голос
/ 29 июля 2009

Я портирую приложение isapi (pageproducers) с delphi 7 на delphi 2009, страницы основаны на html-файлах в UTF8.

Все идет хорошо, за исключением случаев, когда запускается Onhtmltag, и я заменяю прозрачный тег на любое значение специальными символами, такими как символы с ударением (áé ...). Эти символы заменяются в выводе символом..

Что не так?

Ответы [ 3 ]

4 голосов
/ 29 июля 2009

В рамках процедуры отладки вы должны выяснить, какие именно байтовые значения получаются браузером за знак вопроса.

Как вы должны знать, тип строки 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 с прямым порядком байтов.

0 голосов
/ 30 июля 2009

Спасибо за вашу помощь, после некоторого теста проблема была очень очень простой (или глупой тоже)

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

Нет необходимости переводить вручную между unicodestring utf8string и unsistring widestring. Использование строк в Delphi 2009 близко к идеальному.

0 голосов
/ 30 июля 2009

Вероятно, это проблема кодировки символов.

Delphi IDE обычно использует Windows-1252 или UTF-16 для кодирования исходного кода. HTML часто использует UTF-8.

Возможно, вам нужна некоторая транслитерация между этими кодировками. Для этого вам необходимо выяснить, какие именно кодировки используются (как упоминает Роб ).

Или вернуться к HTML с экранированными символами (например, Ральф упоминает)

Можете ли вы опубликовать небольшое приложение, которое показывает проблему? (вы можете написать мне по электронной почте, обо всем, что имеет jeroen в имени пользователя и pluimers.com в доменном имени, будет поступать в мой почтовый ящик).

- Йерун

...