4

我有一个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 都无法打开该文件(在我看来它们都还可以)。有人有想法么?

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

由 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" />
4

3 回答 3

9

好吧,在花了太长时间在这之后,我已经弄清楚发生了什么。基本上,如果存储在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 上,我提交了一个错误报告

于 2009-11-10T09:51:41.303 回答
3

尝试摆脱%文件名中的 。或者,将其转义为%25.

于 2009-11-10T00:37:09.113 回答
0

我猜 WebView 只理解与文本相关的内容类型,因此它忠实地将您的 JPG 视为 base64 编码、解码和显示结果 gobble-goop 作为文本。我真的不知道是否可以为 WebView 设置内容类型,但作为解决方法,您可以尝试将 img 标签放入 html 标签并加载结果页面。此外,您可能只能使用 WebView#loadDataWithBaseUrl

于 2009-11-10T04:48:44.957 回答