我有一个 WebView 我用来打开存储在 assets/ 我的项目目录。它适用于大多数文件,但有一个特别的(我确信我还没有找到其他文件)它只是 将不会 打开。

我遇到问题的文件名为:

"assets/ContentRoot/Photos/XXX Software Logo - jpg - 75%.JPG"

当我把它传递给 WebView, ,它显示错误页面,它显示为:

"file:///android_asset/ContentRoot/Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG"

然后我尝试跑步 URLEncoder.encode() 并得到错误页面,URL 显示为:

"file:///android_asset/ContentRoot/Photos/XXX+Software+Logo+-+jpg+-+75%.JPG"

这两个 URL 都无法打开该文件(对我来说它们看起来都不错)。有人有主意吗?

更新: 如果我编码 % 手动(使用 %25, ,正如 commonsware.com 建议的那样)然后它加载图像,但它尝试将其解析为文本,而不是图像,所以我只是得到很多(基本上)垃圾。

Hosted by imgur.com

另外,使用相对 URL 引用 HTML 文档中的图像不起作用(可能是因为它没有被解析为图像?):

<img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG" />
<img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%25.JPG" />
有帮助吗?

解决方案

好吧,在花了很长时间之后,我已经弄清楚发生了什么事。基本上,如果图像存储在 assets/ 目录的文件名中包含空格(例如“”),它们不会呈现为图像。

myWebView.loadUrl("file:///android_asset/testimage.jpg");

工作正常。然而,

myWebView.loadUrl("file:///android_asset/test+image.jpg");

只是抛出一个未找到的错误

myWebView.loadUrl("file:///android_asset/test image.jpg");
// and
myWebView.loadUrl("file:///android_asset/test%20image.jpg");

显示它显示不正确(作为文本...请参阅相关屏幕截图)。

这种意外行为(至少)出现在 1.5、1.6 和 2.0 上,并且我 提交了错误报告.

其他提示

尝试摆脱在文件名中的%。或者,逃生它作为%25

我猜的WebView既懂文字相关的内容类型,因此它忠实地对待你的JPG作为base64编码,解码和显示结果吞噬,GOOP为文本。我真的不知道,如果它可以设置内容类型的WebView但作为变通方法,您可以试着投HTML标签和负载resultet页面内img标签。此外,你可能只能使用的WebView#loadDataWithBaseUrl

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top