Java BufferedWriter object with utf-8

2022-09-01 04:02:47

我有以下代码,我想让输出流使用utf-8。基本上,我有这样的字符出现,所以它看起来像一个编码问题。éé

我见过很多使用...

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),"UTF-8");

我目前的代码虽然是...

BufferedWriter out = new 
BufferedWriter(new FileWriter(DatabaseProps.fileLocation + "Output.xml"));

是否可以将此对象定义为 UTF-8,而不必使用 OutputStreamWriter?

谢谢


答案 1

不。 不允许您指定编码,这非常烦人。它始终使用系统默认编码。只需吸吮它并使用包装.当然,您仍然可以将 OutputStreamWriter 包装在 BufferedWriter 中:FileWriterOutputStreamWriterFileOutputStream

BufferedWriter out = new BufferedWriter
    (new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8));

或者从Java 8开始:

BufferedWriter out = Files.newBufferedWriter(Paths.of(path));

(当然,您可以将系统默认编码更改为 UTF-8,但这似乎有点极端。


答案 2

您可以使用改进的文件编写器,由我改进。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;

/**
 * Created with IntelliJ IDEA.
 * User: Eugene Chipachenko
 * Date: 20.09.13
 * Time: 10:21
 */
public class BufferedFileWriter extends OutputStreamWriter
{
  public BufferedFileWriter( String fileName ) throws IOException
  {
    super( new FileOutputStream( fileName ), Charset.forName( "UTF-8" ) );
  }

  public BufferedFileWriter( String fileName, boolean append ) throws IOException
  {
    super( new FileOutputStream( fileName, append ), Charset.forName( "UTF-8" ) );
  }

  public BufferedFileWriter( String fileName, String charsetName, boolean append ) throws IOException
  {
    super( new FileOutputStream( fileName, append ), Charset.forName( charsetName ) );
  }

  public BufferedFileWriter( File file ) throws IOException
  {
    super( new FileOutputStream( file ), Charset.forName( "UTF-8" ) );
  }

  public BufferedFileWriter( File file, boolean append ) throws IOException
  {
    super( new FileOutputStream( file, append ), Charset.forName( "UTF-8" ) );
  }

  public BufferedFileWriter( File file, String charsetName, boolean append ) throws IOException
  {
    super( new FileOutputStream( file, append ), Charset.forName( charsetName ) );
  }
}

推荐