Android WebView错误地处理预格式化文本中的换行符

时间:2011-02-17 09:26:23

标签: android html webkit webview

如果我将此HTML推送到WebView

webView.loadData("<html><body><pre>line 1\nline 2</pre></body></html>", "text/html", "utf-8");

它呈现为(在模拟器中,也在设备上)

line 1line 2

而不是

line 1
line 2
正如我所料,

如果我将此HTML保存到SD卡并在浏览器中打开该文件,它会呈现正常。我想我做错了什么,或者这可能是一个错误。无论如何,我想以编程方式将带有预格式化换行符的HTML推送到WebView并呈现换行符。

3 个答案:

答案 0 :(得分:19)

传递给loadData的字符串需要进行URI转义。

您可以使用URLEncoder.encode()来执行此操作,但出于某种原因,WebView不会将'+'解码回' '。一种解决方法是用'+'替换所有'%20'

例如(并使用'+'翻译):

try {
    webview.loadData(URLEncoder.encode("<html><body><pre>line 1\nline 2</pre></body></html>", "utf-8").replaceAll("\\+", "%20"), "text/html", "utf-8");
} catch (UnsupportedEncodingException uee) {
    Log.e("webview", "", uee);
}

答案 1 :(得分:11)

试试这个:

webView.loadDataWithBaseURL(...)

更多信息here

答案 2 :(得分:2)

您也可以使用

chapterWebView.loadDataWithBaseURL("file:///android_asset/NTImages/", message.replaceAll("\\n", "<br/>") , "text/html", "utf-8", "utf-8");