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 错误地处理预格式化文本中的换行符的主要内容,如果未能解决你的问题,请参考以下文章