4

プロジェクトのディレクトリにWebView保存されているいくつかのファイルを開くために使用している があります。assets/ほとんどのファイルで問題なく動作しますが、特に 1 つ (そして、私が見つけていない他のファイルもあると思います)、開かないことがあります。

私が問題を抱えているファイルの名前は次のとおりです。

"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 のどちらもファイルを開くことができませんでした (そして、どちらも問題ないように見えます)。誰にもアイデアはありますか?

更新:% (commonsware.com が提案したように、を使用して) 手でエンコードすると%25、画像が読み込まれますが、画像としてではなくテキストとして解析しようとするため、(基本的に) ゴミが大量に発生します。

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 エンコーディングとして忠実に処理し、デコードして表示すると、テキストとしてゴブル グープが生成されると思います。WebView のコンテンツ タイプを設定できるかどうかはよくわかりませんが、回避策として、html タグ内に img タグをスローして結果ページをロードすることができます。また、おそらく WebView#loadDataWithBaseUrl しか使用できません

于 2009-11-10T04:48:44.957 に答える