Velocityの中国語の問題
今日は小さなツールを作って、VelocityでLatextのtexファイルを生成しましたが、Miktexを使ってPDFを生成すると、中の中国語が文字化けしてしまいました.以前はEclipseが直接実行されていた場合、問題は見つかりませんでした.間違いなくファイル符号化による問題です.
生成したtexファイルをNotepad++で開くと、ファイルの符号化はANSI、つまりシステムローカルの符号化であることがわかります.次はtexを生成するコードです.
Googleは、文字化けしの問題を解決する方法を2つ見つけました.
1. テンプレートファイルの取得時にエンコーディングを指定します.
2. ファイルの生成時にエンコーディングを指定します.
しかし、この2つの方法は役に立たない.上の初期BufferedWriterのコードが偶然に見られました.これがファイルを生成するキーコードで、次のように変更されます.
久しぶりに中国語を見た.
生成したtexファイルをNotepad++で開くと、ファイルの符号化はANSI、つまりシステムローカルの符号化であることがわかります.次はtexを生成するコードです.
public class VelocityHelper {
private static VelocityContext vc;
static {
vc = new VelocityContext();
}
public static void generateFile(String tempatePath, String destPath, Map<String, Object> attributes){
Template template = Velocity.getTemplate(tempatePath);
for(String key : attributes.keySet()){
vc.put(key, attributes.get(key));
}
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(destPath));
template.merge(vc, bw);
bw.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bw != null){
try {
bw.close();
} catch (IOException e) {
}
}
}
}
}
Googleは、文字化けしの問題を解決する方法を2つ見つけました.
1. テンプレートファイルの取得時にエンコーディングを指定します.
Template template = Velocity.getTemplate(tempatePath, "UTF-8");
2. ファイルの生成時にエンコーディングを指定します.
//template.merge(vc, bw);
Velocity.mergeTemplate(destPath, "UTF-8", vc, bw);
しかし、この2つの方法は役に立たない.上の初期BufferedWriterのコードが偶然に見られました.これがファイルを生成するキーコードで、次のように変更されます.
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destPath), "UTF-8"));
久しぶりに中国語を見た.