- PR -

velocityを使ってファイル生成時の文字化け

1
投稿者投稿内容
tori
会議室デビュー日: 2009/02/27
投稿数: 2
投稿日時: 2009-02-27 21:09
velocityを使ってファイル生成(htmlファイル)をしています。
プログラムソース、テンプレート(.vm)ファイル、生成するファイルすべてutf-8です。
ところが、生成されたhtmlファイルはsjisになってしまいます。

いろいろな情報を調べて下記のように設定しています。

<前略>

VelocityEngine engine = new VelocityEngine();

 prop.setProperty("input.encoding", "UTF-8");
 prop.setProperty("output.encoding", "UTF-8");
 prop.setProperty("default.contextType", "text/html; charset=UTF-8");
 engine.init(prop);

 Template template = engine.getTemplate("Template.vm","utf-8");

<以下略>

いろいろと調べて上記設定にしたのですが・・・
何かお気づきの事があればご教授いただけますでしょうか。

ちなみに情報を入力するフォームはflexで作成しており、該当フォームの
mxmlの冒頭に
<?xml version="1.0" encoding="utf-8"?>
と記述しています。

何か基本的な事が抜けているのかとも思うのですが、どうしても解決でき
ないため、投稿させていただきました。

どうぞよろしくお願いいたします。


tori
a-san
ベテラン
会議室デビュー日: 2004/06/01
投稿数: 53
投稿日時: 2009-02-27 21:48
肝心のtemplate.merge()に渡すときのWriterはどのように作成しているのでしょうか?
FileWriterで作成するとデフォルトの文字コードになるので、
OutputStreamから文字コードを指定してWriterにする必要があります。
コード:
OutputStreamWriter writer = new OutputStreamWriter(
        new FileOutputStream("foo.html"), "UTF-8");

tori
会議室デビュー日: 2009/02/27
投稿数: 2
投稿日時: 2009-03-01 16:40
a-san さん

お返事ありがとうございます。
そうなのですね・・・そこは過去に使っていたものをそのまま使っていました。
デフォルトはsjisなのでしょうかね・・・sjisの時は問題なかったので・・・

FileOutputStream fos = new FileOutputStream(outputFilePath);
OutputStreamWriter os = new OutputStreamWriter(fos);

としていました(^^ゞ
ご指摘の通り試してみますm(__)m

tori
1

スキルアップ/キャリアアップ(JOB@IT)