使用utf-8的Java BufferedWriter对象

dav*_*rld 31 java encoding utf-8

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

我见过很多使用的例子......

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(path),"UTF-8");
Run Code Online (Sandbox Code Playgroud)

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

BufferedWriter out = new 
BufferedWriter(new FileWriter(DatabaseProps.fileLocation + "Output.xml"));
Run Code Online (Sandbox Code Playgroud)

是否可以将此对象定义为UTF-8而无需使用OutputStreamWriter?

谢谢,

Jon*_*eet 124

FileWriter没有让你指定的编码,这是非常烦人.它始终使用系统默认编码.只需将它吸干并使用OutputStreamWriter包装FileOutputStream.您当然可以将OutputStreamWriter包装在BufferedWriter中:

BufferedWriter out = new BufferedWriter
    (new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8));
Run Code Online (Sandbox Code Playgroud)

或者从Java 8开始:

BufferedWriter out = Files.newBufferedWriter(Paths.of(path));
Run Code Online (Sandbox Code Playgroud)

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

  • @Chris:这些天我只使用Files.newBufferedWriter - 不需要第三方库. (5认同)
  • 问题可能是您用于读取文件的程序未配置为utf-8. (2认同)
  • 啊,非常感谢你,我不知道这必须在读取和写入时进行配置,谢谢:) (2认同)

小智 5

您可以使用改进的FileWriter,由我改进.

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 ) );
  }
}
Run Code Online (Sandbox Code Playgroud)