Velocityの中国語の問題


今日は小さなツールを作って、VelocityでLatextのtexファイルを生成しましたが、Miktexを使ってPDFを生成すると、中の中国語が文字化けしてしまいました.以前はEclipseが直接実行されていた場合、問題は見つかりませんでした.間違いなくファイル符号化による問題です.
生成した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"));

久しぶりに中国語を見た.