以下是部分代码。
        VelocityContext context = new VelocityContext();
        Template template = Velocity.getTemplate("iptemp.txt", "gb2312");        int countInt = adao.getMlAdownerCount() ;
//        countInt = 16;        List adownerlist = adao.listMlAdowner(1, countInt);            for (Iterator iter = campaignlist.iterator(); iter.hasNext(); ) {
                MlCampaign mlCampaign = (MlCampaign) iter.next();
                
                List mlAdList = addao.listMlAd(mlCampaign, 1, 20);
                ArrayList adList = new ArrayList();
                for (Iterator iter2 = mlAdList.iterator(); iter2.hasNext(); ) {
                    MlAd mlAd 
            context.put("adOwnerName", adownerNameString);
            context.put("campaignMap", campaignMap);
            context.put("counts", getCountFromCampaign(campaignMap));
            StringWriter writer = new StringWriter();
            template.merge(context, writer);
            
   FileOutputStream fos = new FileOutputStream(htmlFilePath + mlAdowner.getAdOwnerId() + "_IP.jsp");            Writer out = new OutputStreamWriter(fos, "gb2312");
   out.write(new String(writer.toString().getBytes("gb2312")));
   out.close();

解决方案 »

  1.   

    最直接的方法是把中文编码转换成unicode编码,就没有这些问题。
      

  2.   

    gb2312
    的地方都换成
    UTF-8
    试试
      

  3.   

    http://dev.csdn.net/article/27/27140.shtm
    http://dev.csdn.net/article/27/27142.shtm
    这个应该对你有帮助
      

  4.   

    我用java 文件名 -encoding GBK解决了大部分问题,可是从数据库里出来的还是以问号的形式存储到文件里,怎么回事呀?这个问题解决,立马结分。
      

  5.   

    数据库连接串指定的是什么编 码?如果是oracle的话 数据库所在机器的NLS_language 是什么如果是 AL32UTF8的话就要在开始的时候就转码.
      

  6.   

    try {
                fieldname = (fieldname == null) ?
                      fieldname :
                      new String (fieldname.getBytes ("ISO8859_1") ,
                                  "GBK");
            }
            catch (UnsupportedEncodingException ex) {
                fieldname = fieldname;
            }