Java openConnection使用UTF-8获取xml
我想使用openConnection下载并保存xml文件 问题是,当我保存文件时,有错误的字符集 我的代码是:Java openConnection使用UTF-8获取xml,java,utf-8,urlconnection,Java,Utf 8,Urlconnection,我想使用openConnection下载并保存xml文件 问题是,当我保存文件时,有错误的字符集 我的代码是: URL url = new URL(partnersEntity.getUrl()); URLConnection urlConnection = url.openConnection(); urlConnection.setRequestProperty("Content-Length", "500000");
URL url = new URL(partnersEntity.getUrl());
URLConnection urlConnection = url.openConnection();
urlConnection.setRequestProperty("Content-Length", "500000");
urlConnection.setRequestProperty("Accept-Charset", "UTF-8");
urlConnection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
Calendar calendar = Calendar.getInstance();
Date now = calendar.getTime();
Timestamp currentTimestamp = new Timestamp(now.getTime());
File file = new File(myFile);
FileWriter writer = new FileWriter(file);
IOUtils.copy(urlConnection.getInputStream(), writer);
writer.close();
在我的档案里,我在特殊的地方看到了像“?”这样的标记
我应该更改什么?(1)检查您正在阅读的资源是否确实在UTF-8中。您请求使用“接受字符集”,但这不能保证。然而。让我们假设它是UTF-8
(2) 指定正在使用的书写器的字符集。通过使用FileWriter,您可以获得正在运行的环境的“默认”字符集。。。可能不是UTF-8。最好使用OutputStreamWriter进行具体说明
OutputStream os = new OutputStream(file);
OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8");
(3) 告诉副本如何解释传入流:
IOUtils.copy(urlConnection.getInputStream(), writer, "UTF-8");
(1) 检查您正在阅读的资源是否真的在UTF-8中。您请求使用“接受字符集”,但这不能保证。然而。让我们假设它是UTF-8
(2) 指定正在使用的书写器的字符集。通过使用FileWriter,您可以获得正在运行的环境的“默认”字符集。。。可能不是UTF-8。最好使用OutputStreamWriter进行具体说明
OutputStream os = new OutputStream(file);
OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8");
(3) 告诉副本如何解释传入流:
IOUtils.copy(urlConnection.getInputStream(), writer, "UTF-8");
在这种情况下,不要使用读/写器,让xml保持原样
FileOutputStream out = new FileOutputStream(file);
IOUtils.copy(urlConnection.getInputStream(), out);
通过使用FileWriter,您正在使用平台默认字符集编写xml数据,这绝不是您想要做的。始终将xml视为二进制数据,而不是文本数据。在这种情况下,不要使用读写器,让xml保持原样
FileOutputStream out = new FileOutputStream(file);
IOUtils.copy(urlConnection.getInputStream(), out);
通过使用FileWriter,您正在使用平台默认字符集编写xml数据,这绝不是您想要做的。始终将xml视为二进制数据,而不是文本数据。因为他将数据作为二进制流获取,并且只想写入文件,所以让
编写器参与编写或编码根本没有用:他应该将其作为流写入(如@jtahlborns答案所示)。是的,你是对的。将其保留为字节流要优雅得多。但愿我想到了那件事。。。。但是,如果您确实希望处理字符(在某些情况下,您希望这样做),这里的课程是明确说明字符编码,并且永远不要使用FileWriter。因为他以二进制流的形式获取数据,只想写入文件,涉及编写者或编码根本没有用:他应该将其作为流来编写(正如@jtahlborns的答案所示)。是的,你是对的。将其保留为字节流要优雅得多。但愿我想到了那件事。。。。但是,如果您确实希望处理字符(在某些情况下,您希望这样做),那么这里的课程将明确说明字符编码,并且永远不要使用FileWriter。