Jak kodujesz adres URL w Androidzie?
Myślałem, że to tak:
final String encodedURL = URLEncoder.encode(urlAsString, "UTF-8");
URL url = new URL(encodedURL);
Jeśli zrobię powyższe, znak http://
in urlAsString
zostanie zastąpiony przez http%3A%2F%2F
in, encodedURL
a następnie dostanę a, java.net.MalformedURLException
gdy użyję adresu URL.
Uri.encode(query);
zamiast.Dodam tutaj jedną sugestię. Możesz to zrobić, co pozwala uniknąć pobierania zewnętrznych bibliotek.
Wypróbuj to:
Widać, że w tym konkretnym adresie URL muszę zakodować te spacje, aby móc użyć go do żądania.
Wykorzystuje to kilka funkcji dostępnych w klasach Androida. Po pierwsze, klasa URL może rozbić adres URL na odpowiednie komponenty, więc nie trzeba wykonywać żadnych operacji wyszukiwania / zamiany łańcucha. Po drugie, w tym podejściu wykorzystuje się właściwość klasy URI polegającą na prawidłowym ucieczce komponentów podczas tworzenia identyfikatora URI za pomocą komponentów, a nie pojedynczego łańcucha.
Piękno tego podejścia polega na tym, że możesz wziąć dowolny prawidłowy ciąg adresu URL i sprawić, aby działał bez potrzeby specjalnej wiedzy na jego temat.
źródło
Dla Androida użyłbym String android.net.Uri.encode (String s)
Dawny/
źródło
Uri.encode("a=1&b=1")
produkuje,a%3D1%26b%3D1
ale oczekuje sięa=1&b=1
a=1&b=1
jako zapytanie, chcesz zapytać dokładnie o to.Możesz także tego użyć
to najprostsza metoda
źródło
źródło
możesz użyć poniższych metod
lub
drugi jest lepszy niż pierwszy.
źródło
Znajdź arabskie znaki i zamień je na kodowanie UTF-8. coś takiego:
źródło