数据网页:text/html不适用于某些WebView文本/ html内容字符串

tac*_*cos 3 android character-encoding android-webview

我使用以下Java代码创建一些用于显示内容的HTML.

public String htmlFromArrayList(ArrayList<TSI> a) {

    StringBuilder returnStringBuilder = new StringBuilder();

    for (TSI i : a) {
        returnStringBuilder.append("<h3>");
        returnStringBuilder.append(i.itemTitle);
        returnStringBuilder.append("</h3><p>");
        returnStringBuilder.append(i.itemText);
        returnStringBuilder.append("</p>");
    }

    return returnStringBuilder.toString();
}
Run Code Online (Sandbox Code Playgroud)

加载我使用的字符串

mWebView.loadData(htmlFromArrayList(mSummaryItemArrayList), "text/html", null);
Run Code Online (Sandbox Code Playgroud)

现在这适用于我的约60%到70%ArrayList<TSI>,但对于其他人,当我打开时,我得到一个错误TSI:

The web page at data:text/html;null,%3Cp%E.......p%3E might be temporarily down or it may have moved...

我假设这与charset中的奇怪字符有关.错误消息是什么意思?

Eri*_*ski 9

您是否在i.itemText或i.itemTitle中有百分号,反斜杠或其他非字母字符等奇怪的字符?如果这样做,那将导致"找不到网页"问题.

http://code.google.com/p/android/issues/detail?id=4401

此外,您没有传入编码,尝试传入"UTF-8"而不是null.

mWebView.loadData(htmlFromArrayList(mSummaryItemArrayList), "text/html", "utf-8");
Run Code Online (Sandbox Code Playgroud)

通过用HTML实体(Ampersand Pound 37)替换所有%符号可以解决这个问题:(%).

有报告称,如果任何中文字符被输入您的webView,即使您处理百分号,您仍然可以获得"找不到页面"的问题.因此,解决方法是尝试这样做:

这适用于所有内容和中文字符:

mWebView.loadData(URLEncoder.encode(html,"utf-8").replaceAll("\\+"," "), "text/html", "utf-8");
Run Code Online (Sandbox Code Playgroud)

来源 http://code.google.com/p/android-rss/issues/detail?id=15