• 締切済み

指定したcontenttypeで出力されません

はじめまして smile50yenです。 xml+xslで画面を出力する再にContentTypeを動的に変更しようとしても常にUTF-8となって出力されてしまいます。 以前は、tomcat5.0系で動かしていた時は問題なかったのですが、 tomcat5.5にバージョンアップしてからこの現象が起こるようになりました。 xsl側の問題なのかjava側の問題なのか、tomcat5.5の設定の問題なのか判断ができず困っています。。。 参考になるサイトなど知っている方おられますでしょうか?ご教授願います。 よろしくお願いいたします。 ------------以下ソースコード---------------------------- encodingに文字コードが入ります。 例えば、「Shift_JIS」 response.setContentType("text/html;charset=" + encoding); response.setCharacterEncoding( encoding ); TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transformer = transFactory.newTransformer( new StreamSource( xslファイル ) ); transformer.setOutputProperty(OutputKeys.ENCODING, encoding); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), encoding)); DOMSource source = new DOMSource(xmlドキュメント); StreamResult s_result = new StreamResult(out); transformer.transform(source, s_result); ---------------------------------------------------------

みんなの回答

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.1

こういうアプローチで調べてみてはどうでしょう。 最後の >StreamResult s_result = new StreamResult(out); >transformer.transform(source, s_result); で、出力先をファイルなどに書き出してみて、そのエンコードがShift_JISなら Tomcat側でUTF-8に変換しているとわかりますし、ファイルの時点でUTF-8なら、 transformerの方で変換していることになります。 また、XSLはよくわからないのですが、変換元のXMLとXSLのエンコードや、 先頭部のエンコード宣言も結果に影響しそうですね。 それと >PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), encoding)); PrintWriter out = response.getWriter() ってできませんでしたっけ? response.getOutputStream() を使ってしまうと、 2行目の response.setCharacterEncoding( encoding ); の意味が なくなってしまいますよね。

smile50yen
質問者

お礼

こんにちわ。thamansaさん 回答ありがとうございます。 投稿してから色々と調べてみましたが、XSL変換に使用しているwalanのAPI(walan.jar)のバージョンの違いによるものだということがわかってきました。 thamansaさんの方法でも調べさせていただきます。 宜しくお願いします。