我正在尝试使用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,但它在那里工作得很好 有什么方法可以解决这个问题吗?
答案 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”后一切正常。