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

Posted

技术标签:

【中文标题】Android WebView 错误地处理预格式化文本中的换行符【英文标题】:Android WebView incorrectly handling newlines in preformatted text 【发布时间】:2011-06-28 23:08:56 【问题描述】:

如果我将此 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 保存到 sdcard 并在浏览器中打开文件,它会呈现良好。我想我做错了什么,或者这可能是一个错误。无论如何,我想以编程方式将带有预格式化换行符的 HTML 推送到 WebView 并呈现换行符。

【问题讨论】:

【参考方案1】:

传递给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);

【讨论】:

当我从服务器传递下载的 html 数据时,webview 显示“页面不可用”消息。这篇文章也帮助我解决了我的问题 NewLines for "text/plain" - 即使加载的字符串是 Url 编码的,页面仍然无法正常工作。【参考方案2】:

试试这个:

webView.loadDataWithBaseURL(...)

更多信息here

【讨论】:

简单实用!示例调用:webView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null);【参考方案3】:

你也可以使用

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

【讨论】:

以上是关于Android WebView 错误地处理预格式化文本中的换行符的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中预加载网页(使用 WebView?)

Android APP之WebView如何校验SSL证书

Android APP之WebView如何校验SSL证书

在 Android 的视频闪屏期间预加载 WebView

Android 浏览器/webview 错误?内容处置:附件;文件名="xyz.txt"

手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案