2014-12-23 2 views
3

Я хочу создать веб-приложение квадратным пикассо, но если URL-адрес изображения содержит персидские символы (ا, ب, ج, ی, ...), Picasso не загружает изображение.Android Square Picasso не загружает персидский символ image url

Этот URL не работает:

 Picasso.with(mContext).load("http://www.shutterstock.ir/thumbs/10006/74601661-گربه-چشم-ابی-ولاغر-سیامی-در-یک-پس-زمینه-،-وکتور-سفید.jpg") 
    .placeholder(R.drawable.ic_launcher) 
    .error(R.drawable.face_top_image).noFade().resize(100, 100) 
    .into(imageView);  

Этот URL работа

 Picasso.with(mContext).load("http://www.shutterstock.ir/thumbs/10006/74601661-%DA%AF%D8%B1%D8%A8%D9%87-%DA%86%D8%B4%D9%85-%D8%A7%D8%A8%DB%8C-%D9%88%D9%84%D8%A7%D8%BA%D8%B1-%D8%B3%DB%8C%D8%A7%D9%85%DB%8C-%D8%AF%D8%B1-%DB%8C%DA%A9-%D9%BE%D8%B3-%D8%B2%D9%85%DB%8C%D9%86%D9%87-%D8%8C-%D9%88%DA%A9%D8%AA%D9%88%D8%B1-%D8%B3%D9%81%DB%8C%D8%AF.jpg") 
    .placeholder(R.drawable.ic_launcher) 
    .error(R.drawable.face_top_image).noFade().resize(100, 100) 
    .into(imageView);  

ответ

8

Вы должны URI кодирования URL.

См docs

Uri.encode(url); 

Или, если указать некоторые допустимые символы следующие работы:

private static final String ALLOWED_URI_CHARS = "@#&=*+-_.,:!?()/~'%"; 
String urlEncoded = Uri.encode(path, ALLOWED_URI_CHARS); 
+0

большое спасибо. это правильно работает –

+0

'Uri.encode (url)' будет кодировать всю строку, включая ': //' и forward-slash в пути. Лучше всего использовать 'ALLOWED_URI_CHARS', которые избегают этих': 'и'/'s. –

1

Вы должны кодировать Url. Так что попробуйте это

URIUtil.encodeQuery(myUrl). 

или же это один: http://developer.android.com/reference/java/net/URLEncoder.html

URLEncoder.encode(myUrl, "UTF-8"); 

Также существует проблема here

+0

Кажется, что URIUtil' был удален или перемещен где-то еще в 4.5.4. Мне было сложно решить, какой пакет apache включить. –

0

просто использовать из этой функции

public static String encodUrl(String url){ 
      String[] splitUrl = url.split("/"); 
      String imageName = splitUrl[splitUrl.length-1];//get name of file 
      String mainUrl = url.replaceAll(imageName , "");//get url without file name bacause dont need to encode 

      return (mainUrl + Uri.encode(imageName)); 
     } 
Смежные вопросы