用Java从internet读取UTF-8编码的文本文件

用Java从internet读取UTF-8编码的文本文件,java,utf-8,Java,Utf 8,我想从互联网上读取一个xml文件。你可以找到它。 问题是它是用UTF-8编码的,我需要将它存储到一个文件中,以便以后解析它。我已经阅读了很多关于这方面的主题,以下是我的想法: BufferedReader in; String readLine; try { in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); BufferedWriter out = new BufferedWrit

我想从互联网上读取一个xml文件。你可以找到它。
问题是它是用UTF-8编码的,我需要将它存储到一个文件中,以便以后解析它。我已经阅读了很多关于这方面的主题,以下是我的想法:

BufferedReader in;
String readLine;
try
{
    in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
    BufferedWriter out = new BufferedWriter(new FileWriter(file));

    while ((readLine = in.readLine()) != null)
        out.write(readLine+"\n");

    out.close();
}

catch (UnsupportedEncodingException e)
{
    e.printStackTrace();
}

catch (IOException e)
{
    e.printStackTrace();
}
此代码一直工作到这一行:
Chérie FM

当我调试时,我得到以下信息:
Ch�rie FM


很明显,有些东西我不明白,但在我看来,我遵循了在几个网站上看到的代码

此文件未编码为
UTF-8
,而是
ISO-8859-1

通过将代码更改为:

BufferedReader in;
String readLine;
try
{
    in = new BufferedReader(new InputStreamReader(url.openStream(), "ISO-8859-1"));
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file) , "UTF-8"));

    while ((readLine = in.readLine()) != null)
        out.write(readLine+"\n");
    out.flush();
    out.close();
}

catch (UnsupportedEncodingException e)
{
    e.printStackTrace();
}

catch (IOException e)
{
    e.printStackTrace();
}

您应该会得到预期的结果。

如果需要以给定的编码编写文件,请改用FileOutputStream

in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
FileOutputStream out = new FileOutputStream(file);

while ((readLine = in.readLine()) != null)
    write((readLine+"\n").getBytes("UTF-8"));

out.close();

它是用ISO-8889-1编码的,而不是UTF-8<代码>。我还验证了发送的实际字节也是ISO-8889-1。@Esailija:我看不出为什么我会打开显示的链接。我看到了
——尽管内容看起来确实是ISO-8859-1。很奇怪。@JonSkeet你怎么看?perso.mcom.fr/thibault/channelList.xml没有这个功能。它有ISO-8859-1字节的
。@Esailija:不适合我,无论是使用Chrome还是通过wget。也许它是根据某个客户端头自动更改声明,但没有更改实际的内容编码?@JonSkeet他们一定在嗅探并更改它。我的浏览器发送此标题:
Accept字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3
。也许他们只是读了第一件事,然后在xml编码属性中使用它?谁知道呢