Java 下载时以HTML特殊符号发布,android
我正在尝试将html内容从一个网页下载到SD卡。该网页还包含特殊符号。所以我考虑在HTTP请求中应用UTF-8。但当我下载它时,它并没有正确地显示出来。网页上的特殊符号在其他字符集中转换。甚至到目前为止,我也尝试用不同的Unicode字符检查convert,但这并不能解决我的问题。 这里是原始网页图像的快照。 现在,在android端下载这个视图源代码后,当我打开文件时,它显示如下 这就是问题所在,现在让我展示我的代码片段: 在这里,您可以看到点击网页并以字符串形式获取viewsource 编写html文件的代码Java 下载时以HTML特殊符号发布,android,java,android,html,Java,Android,Html,我正在尝试将html内容从一个网页下载到SD卡。该网页还包含特殊符号。所以我考虑在HTTP请求中应用UTF-8。但当我下载它时,它并没有正确地显示出来。网页上的特殊符号在其他字符集中转换。甚至到目前为止,我也尝试用不同的Unicode字符检查convert,但这并不能解决我的问题。 这里是原始网页图像的快照。 现在,在android端下载这个视图源代码后,当我打开文件时,它显示如下 这就是问题所在,现在让我展示我的代码片段: 在这里,您可以看到点击网页并以字符串形式获取viewsource
因此,请帮我解决这个问题:如果我猜原始页面是Windows Latin-1,那么您应该以该编码加载它。 然后,字符串中的Java intern保存Unicode版本 编码主要由HTTP头决定,如
Content-Type: text/html; charset=ISO-8869-1
Content-Encoding: ISO-8869-1
<html>....
在HTML源文本中也指定了编码,并且应该更改为UTF-8
// Old HTML: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
String result2 =
result.replaceFirst("([\"'])text/html.*\\1",
"$1text/html; charset=UTF-8$1");
if (result2 == result) { // Not replaced.
// HTML 5: <meta charset="ISO-8859-1">
result2 =
result.replaceFirst("(?si)<meta\\s*charset=([\"']).*\\1>",
"<meta charset=\"UTF-8\">");
}
if (result2 == result) { // Not replaced.
// No statement, add one, to read as file:
result2 =
result.replaceFirst("(?si)<head>",
"$0<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
}
result = result2;
Content-Type: text/html; charset=ISO-8869-1
Content-Encoding: ISO-8869-1
<html>....
URL url = new URL(sWebUrl);
URLConnection con = url.openConnection();
String encoding = con.getContentEncoding();
if (encoding == null) {
encoding = "ISO-8859-1"; // HTTP default encoding: Latin-1.
}
if (encoding.equalsIgnoreCase("ISO-8859-1")) {
encoding = "Windows-1252";
// Browsers interprete Latin-1 as Windows Latin-1.
}
InputStream in = con.getInputStream();
responseString = IOUtils.toString(in, encoding);
// Old HTML: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
String result2 =
result.replaceFirst("([\"'])text/html.*\\1",
"$1text/html; charset=UTF-8$1");
if (result2 == result) { // Not replaced.
// HTML 5: <meta charset="ISO-8859-1">
result2 =
result.replaceFirst("(?si)<meta\\s*charset=([\"']).*\\1>",
"<meta charset=\"UTF-8\">");
}
if (result2 == result) { // Not replaced.
// No statement, add one, to read as file:
result2 =
result.replaceFirst("(?si)<head>",
"$0<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
}
result = result2;