用Java从internet读取UTF-8编码的文本文件
我想从互联网上读取一个xml文件。你可以找到它。用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
问题是它是用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编码属性中使用它?谁知道呢