Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 下载时以HTML特殊符号发布,android_Java_Android_Html - Fatal编程技术网

Java 下载时以HTML特殊符号发布,android

Java 下载时以HTML特殊符号发布,android,java,android,html,Java,Android,Html,我正在尝试将html内容从一个网页下载到SD卡。该网页还包含特殊符号。所以我考虑在HTTP请求中应用UTF-8。但当我下载它时,它并没有正确地显示出来。网页上的特殊符号在其他字符集中转换。甚至到目前为止,我也尝试用不同的Unicode字符检查convert,但这并不能解决我的问题。 这里是原始网页图像的快照。 现在,在android端下载这个视图源代码后,当我打开文件时,它显示如下 这就是问题所在,现在让我展示我的代码片段: 在这里,您可以看到点击网页并以字符串形式获取viewsource

我正在尝试将html内容从一个网页下载到SD卡。该网页还包含特殊符号。所以我考虑在HTTP请求中应用UTF-8。但当我下载它时,它并没有正确地显示出来。网页上的特殊符号在其他字符集中转换。甚至到目前为止,我也尝试用不同的Unicode字符检查convert,但这并不能解决我的问题。 这里是原始网页图像的快照。

现在,在android端下载这个视图源代码后,当我打开文件时,它显示如下

这就是问题所在,现在让我展示我的代码片段:

在这里,您可以看到点击网页并以字符串形式获取viewsource

编写html文件的代码


因此,请帮我解决这个问题:

如果我猜原始页面是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;