我的一个程序里要从数据库读数据,接着写入到一个文件里面,写入到文件的文本是定长的,从数据库读出来的字段长度不够会用一个函数在右边补空格补全,我先是用new BufferedWriter(new FileWriter(fileName))的方法来输出到文件,结果文件中的汉字全都变成?号了,我又改换OutputStreamWriter(new FileOutputStream(fileName),"GB2312")的方式输出,汉字是出来了,但输出的文本却不是定长了,本来每一段文字是60个字符长的,但是现在就是有n个汉字就在60的基础上多n个字符。我想应该是补空格函数那里出的问题,它应该是将每个汉字当成一个字符来算了,但我想了好久都不知道怎样解决,请各位大侠帮帮忙,急,谢谢了~~~
另注,数据库是informix的,java程序所在系统的原来的编码方式是ISO-8859-1

解决方案 »

  1.   

    这个是java对中文支持的问题,你要判断读取的文件是用哪种编码写的,然后判断用那个编码输出,如下:
                    String filePath = "d:\\异常总结.txt";
    java.io.File f2 = new java.io.File(filePath);
    try {
    java.io.InputStream ios = new java.io.FileInputStream(f2);
    byte[] b = new byte[3];
    ios.read(b);
    ios.close();
    if (b[0] == -17 && b[1] == -69 && b[2] == -65){
    System.out.println(f2.getName() + "编码为UTF-8");
    System.out.println(readFile(filePath,"UTF-8"));
    }
    else{
    System.out.println(f2.getName() + "可能是GBK");
    System.out.println(readFile(filePath,"GBK"));
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
      

  2.   

    其他的编码你要用到插件啊,但平常我们基本见到的就utf-8和gbk2312或gbk
      

  3.   

    弄个过虑器什么的。编码格式最好采购gbk的,这个里面的汉字要比gb2312里面的多一些。
      

  4.   

    其实中文输出这个问题是解决了,但是,我输出数据时是需要定长的,长度不足要在字段后补空格,但总是输出的字段长度变长了,这个问题应该怎样解决,有没有办法判断从数据库里读取的字段有多少个汉字
    下面是我用来补空格的程序 public static String RepairSpace(String str, int len) {
    if(str == null)
    str = "";
    str = str.trim(); if (str.equals("")) {
    while (str.length() < len) {
    str = str + " ";
    }
    }
    if (str.getBytes().length > len) 
    str = new String(str.getBytes(), 0, len);
    }
    //判断字符串的长度,因为字符串中可能含有汉字
    byte[] strs = str.getBytes(); while (strs.length < len) {
    String str2 = str + " ";
    str = str2;
    strs = str.getBytes();
    }
    return str;
    }