在创建文件并打印字符串时,如果不指定编码,默认是按系统的编码格式来。比如我们的linux环境中编码如下:

CMREAD-SV43 /home/wlf> locale
LANG=en_US.UTF-
LC_CTYPE="zh_CN.GBK"
LC_NUMERIC="zh_CN.GBK"
LC_TIME="zh_CN.GBK"
LC_COLLATE="zh_CN.GBK"
LC_MONETARY="zh_CN.GBK"
LC_MESSAGES="zh_CN.GBK"
LC_PAPER="zh_CN.GBK"
LC_NAME="zh_CN.GBK"
LC_ADDRESS="zh_CN.GBK"
LC_TELEPHONE="zh_CN.GBK"
LC_MEASUREMENT="zh_CN.GBK"
LC_IDENTIFICATION="zh_CN.GBK"
LC_ALL=zh_CN.GBK

  中文编码看LC_ALL,这里我们环境配置的是GBK,那么如下代码就是使用GBK来的,因为这里并未设置默认编码格式:

    protected void writerLog(String content)
{
// 记录创建时间为当前时间
createDate = new Date();
try
{
// 生成文件对象,如果文件不存在,要创建新文件。
File file = new File(this.fileName); if (!file.exists() && file.createNewFile())
{
// 上面方法有返回值,findBugs会报警,所以采用空实现的形式解决
;
} // 获得当前文件大小
this.fileSize = file.length();
file = null; // 打开输出
this.logWriter = new PrintWriter(new FileWriter(this.fileName, true), true);
}
catch (IOException e)
{
e.printStackTrace();
this.logWriter = null;
} this.logWriter.print(content);
this.logWriter.flush();
}

  如何指定具体的编码格式呢?我们把这一行改下:

this.logWriter = new PrintWriter(new FileWriter(this.fileName, true), true);

  使用OutputStreamWriter对象来指定UTF-8编码:

    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(this.fileName, true), "UTF-8");
this.logWriter = new PrintWriter(osw, true);
04-16 23:44
查看更多