私は奇妙なエンコーディング状況を抱えており、HTML ページ自体は (すべてのアクセント付き文字が適切に表示されて) 本来のように表示されますが、すべてのポップアップ Dojo ダイアログは正しいエンコーディングを使用できません。
セットアップは次のとおりです。
- Tomcat6.0.18 で実行されている Hibernate/Spring/Struts2 を使用した Java Web プロジェクト。ページは、Tiles2 によってまとめられた JSP タイルとして生成されます。
- すべてのソース ファイルは、ISO-8859-1 (Java 仕様による) にあるリソース プロパティ ファイル ( ) を除いて、UTF-8 でエンコードされています。
*.properties - データベースは 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"?>JSP コードから生成された各 HTML ページには、次の
<head>メタタグが含まれています。<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>Tomcat エンコーディング フィルタは、のヘッダーを
every single request going through Tomcat次の値に設定します。text/html;charset=UTF-8dojo 1.2.3 は、次のステートメントを使用して各ページで初期化されます。
<script type="text/javascript" src="/scripts/dojo/dojo/dojo.js" djConfig="parseOnLoad:true,usePlainJson:true,locale:'fr'"></script>A
dijit.Dialogが最初に作成され、次に次のステートメントによって開かれます (/votingOptions以前と同じ仕様に従う JSP スニペットを返す action-URL --- その 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」という名前 (メイン ページに正しく表示されるため) は、Dojo ダイアログでは「 Kurt Gödel 」と表示されます。
Firebug は、両方の状況 (メイン ページを呼び出すか、ページ上で Dojo ダイアログを開くか) で、Tomcat によって提供されるものと同じ応答ヘッダーを報告することに注意してください。
Server: Apache/2.2.3 (CentOS)
Content-Language: en-US
Connection: close
Content-Type: text/html;charset=UTF-8
これら 2 つのタイプのリクエストの唯一の違い (Content-Length を除く) は次のとおりです。
Transfer-Encoding: chunked
これは、メイン ページをリクエストするときに存在しますが、道場ダイアログの場合には存在しません。
これまでに何が私を逃れたのか、誰かわかりますか?あるいは、この問題の根底にたどり着くためにどのような調査を行うべきかについての提案を歓迎します!