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,但这似乎有点极端.)
小智 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)