cypher256's blog

Pleiades とか作った

Play フレームワークの scala.html などの文字エンコード自動判別を無効化


Eclipse には JSP や HTML の文字エンコードを内容により自動的に判別する機能があります。ただ、これは JSP に include する断片ファイルや Play 2.0 フレームワークscala.html のように meta charset 指定などが無い部分的な HTML を持つ場合、UTF-8Shift_JIS と誤って判定され文字化けが発生します。


回避策として、下記の方が記載されているように、ファイルごとに文字エンコードを指定すれば対応可能ですがこれは面倒です。また、eclipse.ini に -Duser.language=en を指定すれば回避できますが、これは日時表記が英語になる問題があります。

htmlを開くと文字化けするとき - newta(にゅーた)の日記


原因は Dead Zone に記載されているように WST の日本語向けの自動判別のバグで、Eclipse 3.3 以降から現在の Juno でも改修されていません。

http://blog.goo.ne.jp/atlanto/e/f9c32302055b47f3521df3ee0967992d

Pleiades AOP で実行時にバグ修正: HTML 判別を無効化

そもそも内容から完全に文字コードを判別することはできないので Pleiades AOP で動的に無効化します。pleiades-config.xml に下記の AOP 定義を追加し -clean 起動することで回避できます。ちなみに meta タグに charset 指定がある場合はこの AOP 定義に関係なくそれが優先して使用されます。この AOP 定義は次回リリースの Pleiades に組み込む予定です。


plugins/jp.sourceforge.mergedoc.pleiades/conf/pleiades-config.xml

<!-- HTML 日本語文字エンコーディング自動判別無効化 (after) -->
<pointCut editPoint="execution" timing="after">
	<advice><![CDATA[
		return false;
	]]></advice>
	<jointPoint className="org.eclipse.wst.html.core.internal.contenttype.EncodingGuesser" methodName="canGuess"/>
</pointCut>