为什么WebView无法打开某些本地URL(Android)?

时间:2009-11-10 00:21:47

标签: android url webview

我有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"

这些网址都没有能够打开文件(它们对我来说都没问题)。有人有什么想法吗?

更新:如果我手动编码%(使用%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" />

3 个答案:

答案 0 :(得分: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以及filed a bug report上。

答案 1 :(得分:3)

尝试删除文件名中的%。或者,将其作为%25转义。

答案 2 :(得分:0)

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