У меня странная ситуация с кодировкой, когда сама HTML-страница отображается так, как должна (со всеми должным образом отображенными акклиматизированными символами), но все всплывающие диалоги додзё не могут использовать правильную кодировку.
Вот настройка:
- веб-проект Java с Hibernate / Spring / Struts2, работающим на Tomcat6.0.18; страницы генерируются в виде плиток JSP, собранных вместе Tiles2.
- все исходные файлы имеют кодировку UTF-8, , за исключением для файлов свойств ресурса (
*.properties
), которые находятся в ISO-8859-1 (согласно спецификациям Java).
- База данных в кодировке UTF-8.
struts.xml
содержит определение константы:
<constant name="struts.i18n.encoding" value="UTF-8"/>
Каждая плитка JSP начинается с оператора
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
Каждая страница JSP (состоящая из нескольких плиток) начинается с оператора
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<?xml version="1.0" encoding="UTF-8"?>
Каждая HTML-страница, сгенерированная из кода JSP, содержит следующий метатег <head>
:
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
Фильтр кодирования Tomcat устанавливает заголовок для every single request going through Tomcat
в значение:
text/html;charset=UTF-8
dojo 1.2.3 инициализируется на каждой странице оператором
<script type="text/javascript" src="/scripts/dojo/dojo/dojo.js" djConfig="parseOnLoad:true,usePlainJson:true,locale:'fr'"></script>
A dijit.Dialog
сначала создается, а затем открывается с помощью следующих операторов (action-URL /votingOptions
, возвращающий фрагмент JSP, который соответствует тем же спецификациям, что и ранее), который заканчивается фрагментом JSP внутри <div>
диалога):
dialog = new dijit.Dialog({title:"My title",loadingMessage:"Loading..."});
dialog.setHref('/votingOptions');
dialog.show();
В результате всех этих настроек все «обычные» страницы (то есть, за исключением диалогов dojo) отображают все символы, как они должны, акценты и все, независимо от того, приходит ли текст из базы данных или из ресурса файлы.
С другой стороны, содержимое любого диалогового окна dojo искажается: все неакцентированные символы в порядке, но акцентированные символы отображаются точно так, как если бы кто-то пытался прочитать символы UTF-8 как ISO-8859-1 (независимо от того, взяты ли эти символы из базы данных или из файлов ресурсов).
Так, например, имя " Kurt Gödel " (как оно будет правильно отображаться на главной странице) будет отображаться как " Kurt Gö¶del " в додзё диалог!
Обратите внимание, что Firebug сообщает о тех же заголовках ответа, что и Tomcat, в обеих ситуациях (при вызове главной страницы или при открытии диалогового окна dojo):
Server: Apache/2.2.3 (CentOS)
Content-Language: en-US
Connection: close
Content-Type: text/html;charset=UTF-8
Единственная разница между этими двумя типами запросов (кроме Content-Length):
Transfer-Encoding: chunked
, который присутствует при запросе главной страницы, но отсутствует в случае диалога dojo.
Кто-нибудь может понять, что мне удалось избежать? В качестве альтернативы, приветствуются предложения относительно того, какой вид слежки я должен выполнить, чтобы разобраться в этом!