s:includeのバグ
Struts2のs:includeは便利に使えるのだが、バグがあった。8192バイトの境界に複数バイトのUTF-8文字跨ったものをincludeするとその文字が化けてしまうという問題。
これは s:incldueの内部で使用している FastByteArrayOutputStream というのがUTF-8複数バイト境界を考慮していなかったためのようだ。
作成中のページの文字化けの発見から、s:includeのバグとの結論に行き着くまでに大分時間を浪費してしまった。
で s:include のバグ情報として探したらすでに報告されていた。
https://issues.apache.org/struts/browse/WW-2412
しかし、固定長で扱うためにいちいちデコードするんじゃなくて、スッキリと可変サイズのバッファにすれば良いのに。
2.0.11.1でも直っていないので、パッチを当てておいたほうが良いだろう。