Delphi XE7, проблемы с отображением Unicode в PageProducer на WebBroker

Я пишу многоязычное приложение WebBroker (для Apache 2.2), которое отображает данные в кодировке Unicode из базы данных оракула. Те же данные с теми же компонентами обработки данных (Devart's ODAC) в тестовой программе, написанной на Delphi XE7, отображаются правильно. Моя проблема возникла в WebBroker, где я столкнулся со странным поведением, когда я использую PageProducer для подготовки контента к ответу. Когда я использую следующий код в действии:

Response.ContentType := 'text/html; charset=UTF-8';
PageProducer1.HTMLFile:= htmltemplate
Response.Content := 
  PageProducer1.Content+
  'Label 1 ='+Label1fromDB+
  ' Label 2='+Label2fromDB+
  '</body></html>';
Response.SendResponse;

результатом в веб-браузере является то, что все нелатинские символы, которые не были вставлены PageProducer, но уже существовали в файле htmltemplate (который был объявлен как utf-8 с ), заменены другими неправильными символами, текст, который был вставлен PageProducer и был извлечен из базы данных, также не отображается правильно, но дополнительные метки, Label1fromDB и Label2fromDB, которые добавляются к ответу содержимого, как показано в приведенном выше коде, отображаются правильно, имея также те же символы, что и внутри htmltemplate.

Теперь, когда я опускаю объявление

Response.ContentType := 'text/html; charset=UTF-8'

содержимое htmltemplate отображается правильно, но все остальные тексты, текст, заполненный PageProducer, и две метки Label1fromDB и Label2fromDB неправильно

Не могли бы вы помочь мне определить, в чем проблема и что мне нужно сделать, чтобы иметь возможность обслуживать многоязычный контент в формате Unicode через веб-брокера?


person Hb-IT    schedule 28.01.2015    source источник


Ответы (1)


У вас проблемы с разными кодировками Unicode.

И PageProducer.Content, и Response.Content являются строками в кодировке UTF16. Ваш htmltemplate закодирован в UTF8 и неправильно интерпретируется PageProducer.

Скорее всего, причина в том, что файл htmltemplate не имеет UTF8 BOM в начале, и PageProducer будет интерпретировать кодировку этого файла как ANSI по умолчанию. Если это так, добавление UTF8 BOM должно решить вашу проблему.

person Dalija Prasnikar    schedule 29.01.2015
comment
Большое спасибо за ваши разъяснения, Далия, проблема решена, это была именно эта опущенная спецификация в начале html. Итак, я создал новый html-файл с корректно закодированными спецификацией и PageProducer. - person Hb-IT; 30.01.2015