Pourquoi est-WebView impossible d'ouvrir certains locaux de l'Url (Android)?
J'ai un WebView
que j'utilise pour ouvrir certains fichiers stockés dans le assets/
répertoire de mon projet. Il fonctionne très bien pour la plupart des fichiers, mais il y a un en particulier (et je suis sûr que d'autres je n'ai pas trouvé) qu'il vient de ne ouvrir.
Le fichier que je vais avoir des problèmes avec, est nommé:
"assets/ContentRoot/Photos/XXX Software Logo - jpg - 75%.JPG"
Quand je le passe à WebView
, et il affiche la page d'erreur, il le montre comme:
"file:///android_asset/ContentRoot/Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG"
J'ai ensuite essayé de courir URLEncoder.encode()
sur elle et a obtenu l'erreur de la page avec l'URL présentée ainsi:
"file:///android_asset/ContentRoot/Photos/XXX+Software+Logo+-+jpg+-+75%.JPG"
Aucune de ces Url ont été en mesure d'ouvrir le fichier (et ils ont tous deux semblent ok pour moi). Quelqu'un a des idées?
Mise à JOUR: Si je encoder le %
à la main (à l'aide de %25
, comme commonsware.com suggéré) puis il charge l'image, mais il essaie de l'analyser en tant que texte, non pas comme une image, j'ai donc simplement obtenir un grand nombre de (en gros) les déchets.
Aussi, se référant à l'image dans un document HTML avec une URL relative ne fonctionne pas (sans doute parce qu'il n'est pas être analysée comme une image?):
<img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG" />
<img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%25.JPG" />
OriginalL'auteur Jeremy Logan | 2009-11-10
Vous devez vous connecter pour publier un commentaire.
Bon, après avoir passé beaucoup trop de temps sur ce, j'ai compris ce qu'il se passe. En gros, si les images stockées dans la
assets/
répertoire contient des espaces (par exemple, " ") dans leur nom de fichier, ils ne le rendu des images.fonctionne très bien. Cependant,
juste jette un pas trouvé d'erreur et
afficher de façon incorrecte apparaît sous la forme de texte... voir la capture d'écran en question).
Ce comportement inattendu est présent sur (au moins) 1.5, 1.6 et 2.0 et je a déposé un rapport de bug.
OriginalL'auteur Jeremy Logan
Essayer de se débarrasser de la
%
dans le nom de fichier. Ou, s'échapper comme%25
.URLEncoder.encode()
ont géré ça? N'est-ce pas que c'est toute la raison d'exister? De toute façon, je l'ai essayé et il essaie de l'ouvrir maintenant, mais c'est tout simplement le dumping, comme le texte au lieu de rendu de l'image.Votre <img> tag dans votre mise à jour n'a pas correctement codé URL relative, que vous n'avez pas échappé à votre signe % en %25. Pourquoi URLEncoder.encode() n'est pas cela, j'en ai aucune idée, mais autant que je sache, vous ne pouvez pas avoir un nu % dans une URL. En outre, puisque c'est un atout, cuits au four dans votre APK, pourquoi êtes-vous plaisanter avec les noms de fichiers gênants en premier lieu? Il suffit de renommer le fichier pour quelque chose de simple. Si que échoue, vérifiez la validité de l'image JPEG.
Fondamentalement, je suis en train de construire un port d'une application pour iPhone qui va permettre à mon client de vidage des fichiers dans le répertoire actif, modifier quelques paramètres, puis recompiler pour créer "une toute nouvelle app". Je ne peux pas prédire quels sont les caractères des noms de fichier peut contenir et c'est précisément à partir de l'ensemble de test qu'il m'a fourni. Croyez-moi, si je pouvais juste renommer les fichiers, je le ferais.
Ah, aussi, j'ai remarqué que le mauvais nom dans la
<img>
et corrigé... ne fonctionne toujours pas. L'image s'ouvre amende partout ailleurs (Firefox, Eye of GNOME, GIMP), mais juste pour faire bonne mesure, je l'ai ouvert dans GIMP, changé un peu, puis réenregistré. Toujours pas de chance.Juste pour le plaisir, je suis allé de l'avant et a retiré le
%
à partir du nom de fichier et il ne fait pas de différence... ne se charge toujours pas comme une image.OriginalL'auteur CommonsWare
Je suppose que WebView ne comprend que le texte concernant les types de contenu de sorte qu'il fidèlement le traitement de votre JPG comme de l'encodage base64, décode et affiche entraîné gobble-goop en tant que texte. Je ne sais pas vraiment si il est possible de définir un type de contenu pour WebView mais comme solution de contournement, vous pouvez essayer de lancer la balise img intérieur de la balise html et de la charge resultet page. Aussi, vous pouvez probablement utiliser uniquement WebView#loadDataWithBaseUrl
OriginalL'auteur Bostone