Если заголовок Content-Type
присутствует в заголовках ответа HTTP, то он переопределит мета-заголовки. Очень часто этот заголовок уже по умолчанию предоставляется веб-сервером, и чаще всего кодировка отсутствует (что предполагает использование кодировки клиента по умолчанию, которая часто является ISO-8859-1). Другими словами, мета-заголовки обычно интерпретируются только тогда, когда ресурсы открыты локально (не по HTTP). Весьма вероятно, что по этой причине ваши мета-заголовки, по-видимому, не работали при обслуживании по HTTP.
Вы можете использовать Firebug или Fiddler2 для определения заголовков ответа HTTP. Ниже экран Firebug:
Вы можете настроить общий параметр для заголовков ответов HTTP на уровне веб-сервера. Вы также можете настроить его по запросу на уровне языка программирования. Поскольку неясно, какой веб-сервер / язык программирования вы используете, я не могу подробно рассказать о том, как настроить его соответствующим образом.
Обновление : в соответствии с признаками проблемы, что является следующим типичным исключением MySQL:
java.sql.SQLException: Incorrect string value: '\xD8\xB3\xD9\x84\xD8\xA8...'
Последовательность байтов D8 B3 D9 84 D8 A8
является действительной последовательностью UTF-8, которая представляет эти символы سلب
( U + 0633 , U + 0644 и U + 0628 ). Так что часть HTTP в порядке. Вы упомянули, что использовали Jetty 6 в качестве сервлет-контейнера. Более поздние сборки Jetty 6 уже поддерживают UTF-8 из коробки.
Однако проблема в части БД. Это исключение указывает на то, что кодировка БД / таблицы, которую было указано использовать, не поддерживает эту последовательность байтов. Это может произойти, когда БД / таблица не проинструктированы использовать UTF-8.
Чтобы исправить часть БД, введите команды MySQL:
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
А для будущих БД / таблиц используйте также CHARACTER SET utf8 COLLATE utf8_general_ci
в CREATE
.