使用URL.openStream()下载的HTML内容始终包含无效字符

时间:2014-07-21 14:34:02

标签: java html encoding character-encoding

我正在尝试使用Java从YouTube下载HTML代码,但生成的字符串始终包含无效字符。例如,“ü”变成“你?” 我已经尝试使用所有常用的编码,甚至编写了一个小测试程序,尝试编码和编码的每个组合,但无效字符仍然存在。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;

public class EncodingTest {

    public static void main(final String[] args) throws MalformedURLException, IOException {
        for (final Charset a : Charset.availableCharsets().values()) {
            final BufferedReader in = new BufferedReader(new InputStreamReader(new URL("https://www.youtube.com/watch?v=WENkquBHchM").openStream(), a));

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                if (inputLine.contains("og:title")) {

                    System.out.println(inputLine);

                    for (final Charset b : Charset.availableCharsets().values()) {
                        try {
                            System.out.println(new String(inputLine.getBytes(), b) + "\t[" + a + " -> " + b + "]");
                        }
                        catch (final Exception e) {
                        }
                    }
                }
            }
            in.close();
        }
    }
}

如果我在浏览器中打开URL或使用wget或类似的东西下载它,则没有错误。我也试过从其他一些网站下载HTML,但它在那里工作得很好 有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

它是简单的UTF-8(正如Chrome中的响应标题所示)。不要来回转换它。如果它不起作用,问题是你的consol不能显示UTF-8文本。

试试这个:

BufferedReader in = new BufferedReader(new InputStreamReader(new URL("https://...").openStream(), "UTF-8"));

答案 1 :(得分:0)

原来问题是我的源文件的编码。 Eclipse使用“Cp1252”作为默认值。切换到“UTF-8”后一切正常。