如何读取在utf-8中写这个?

Gau*_*ani 10 java inputstream utf-8

我收到了一个错误 io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence

解决方案是以UTF-8读写文件.

我的代码是:

InputStream input = null;
OutputStream output = null;
OutputStreamWriter bufferedWriter = new OutputStreamWriter( output, "UTF8");
input = new URL(url).openStream();
output = new FileOutputStream("DirectionResponse.xml");
byte[] buffer = new byte[1024];
for (int length = 0; (length = input.read(buffer)) > 0;) {
   output.write(buffer, 0, length);
}
BufferedReader br = new BufferedReader(new FileReader("DirectionResponse.xml" ));
FileWriter fstream = new FileWriter("ppre_DirectionResponse.xml");
BufferedWriter out = new BufferedWriter(fstream);
Run Code Online (Sandbox Code Playgroud)

我正在读一个url并将其写入文件DirectionResponse.xml.然后读取DirectionResponse.xml并将其写为*ppre_DirecionResponse.xml*进行处理.

如何更改此选项以便以UTF-8完成读写?

Ted*_*opp 28

首先,您需要调用output.close()(或者至少output.flush()在重新打开文件之前调用输入.这可能是导致问题的主要原因.

然后,你不应该使用FileReaderFileWriter为此,因为它总是使用平台默认编码(通常不是UTF-8).来自以下文档FileReader:

此类的构造函数假定默认字符编码和默认字节缓冲区大小是适当的.

使用时遇到同样的问题FileWriter.替换这个:

BufferedReader br = new BufferedReader(new FileReader("DirectionResponse.xml" ));
Run Code Online (Sandbox Code Playgroud)

用这样的东西:

BufferedReader br = new BufferedReader(new InputStreamReader(
    new FileInputStream("DirectionResponse.xml"), "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

并且类似地fstream.