安卓。 WebView 和 loadData
可以使用以下方法进行网络视图的内容设置 loadData(String data, String mimeType, String encoding)
如何处理html数据编码未知的问题?!
有编码列表吗?
我从我的大学知道,在我的例子中,html 来自 DB 并使用 latin-1 编码。 我尝试将编码参数设置为 latin-1、ISO-8859-1 / iso-8859-1,但在显示 ä、ö、ü 等特殊符号时仍然存在问题。
我将非常感谢任何建议。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
这可以完美地工作,特别是在 Android 4.0 上,它显然忽略了 HTML 内部的字符编码。
在 2.3 和 4.0.3 上测试。
事实上,我不知道除了“base64”之外,最后一个参数还采用什么其他值。一些 Google 示例将 null 放在那里。
This works flawlessly, especially on Android 4.0, which apparently ignores character encoding inside HTML.
Tested on 2.3 and 4.0.3.
In fact, I have no idea about what other values besides "base64" does the last parameter take. Some Google examples put null in there.
WebView.loadData() 根本无法正常工作。我必须做的是:
我认为在你的情况下,你应该在标头和 WebView.loadData() 中将 UTF-8 替换为 latin1 或 ISO-8859-1 。
并且,为了给出完整的答案,这里是编码的官方列表: http://www.iana .org/assignments/character-sets
我更新我的答案以使其更具包容性:
使用WebView.loadData() 具有非 latin1 编码对 html 内容进行编码。前面的示例在 Android 4+ 中无法正常工作,因此我将其修改为如下所示:
但后来我切换到 WebView.loadDataWithBaseURL( ) 并且代码变得非常干净,并且不依赖于 Android 版本:
由于某种原因,这些函数具有完全不同的实现。
WebView.loadData() is not working properly at all. What I had to do was:
I think in your case you should replace UTF-8 with latin1 or ISO-8859-1 both in header and in WebView.loadData().
And, to give a full answer, here is the official list of encodings: http://www.iana.org/assignments/character-sets
I update my answer to be more inclusive:
To use WebView.loadData() with non latin1 encodings you have to encode html content. Previous example was not correctly working in Android 4+, so I have modified it to look as follows:
But later I have switched to WebView.loadDataWithBaseURL() and the code became very clean and not depending on Android version:
For some reason these functions have completely different implementation.
据我了解,
loadData()
只是生成一个data:
URL,并提供数据。阅读 javadocs:
因此,您应该使用 US-ASCII 并自行转义任何特殊字符,或者仅使用 Base64 对所有内容进行编码。假设您使用 UTF-8,以下内容应该有效(我还没有使用 latin1 对此进行测试):
As I understand it,
loadData()
simply generates adata:
URL with the data provide it.Read the javadocs for
loadData()
:Therefore, you should either use US-ASCII and escape any special characters yourself, or just encode everything using Base64. The following should work, assuming you use UTF-8 (I haven't tested this with latin1):
我有这个问题,但是:
不适用于所有设备。我合并了一些方法:
它有效。
I have this problem, but:
not work in all devices. And I merge some methods:
It works.
在Web视图中加载htmlContent的最安全方法是:
“Base64 编码”是官方建议,已在Chrominium 最新 01/2019 错误中再次编写(已存在于 Javadoc 中) strong>(存在于 WebView M72 (72.0.3626.76) 中):
https: //bugs.chromium.org/p/chromium/issues/detail?id=929083
CHROMIUM 团队的官方声明:
“建议修复:
我们的团队建议您使用 Base64 对数据进行编码。我们提供了如何执行此操作的示例:
此修复是向后兼容的(它适用于早期的 WebView 版本),并且也应该是面向未来的(您不会遇到未来的兼容性问题)内容编码)。”
示例:
The safest way to load htmlContent in a Web view is to:
"Base64 encoding" is an official recommendation that has been written again (already present in Javadoc) in the latest 01/2019 bug in Chrominium (present in WebView M72 (72.0.3626.76)):
https://bugs.chromium.org/p/chromium/issues/detail?id=929083
OFFICIAL statement from CHROMIUM TEAM:
"Recommended fix:
Our team recommends you encode data with Base64. We've provided examples for how to do so:
This fix is backwards compatible (it works on earlier WebView versions), and should also be future-proof (you won't hit future compatibility problems with respect to content encoding)."
Example:
使用这个:
字符串自定义Html =文本;
use this:
String customHtml =text ;
上面的答案不适用于我的情况。需要在meta标签中指定utf-8
the answers above doesn't work in my case. You need to specify utf-8 in meta tag
这是快速且有效的 // data = 任何 html 或数学字符串
this is fast and working // data = any html or math string