Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java openConnection使用UTF-8获取xml_Java_Utf 8_Urlconnection - Fatal编程技术网

Java openConnection使用UTF-8获取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");

我想使用openConnection下载并保存xml文件

问题是,当我保存文件时,有错误的字符集

我的代码是:

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。