Możliwe jest użycie następującej metody do ustawienia zawartości loadData widoku internetowego (String data, String mimeType, String encoding)
Jak sobie radzić z nieznanym kodowaniem danych html ?!
Czy jest lista kodowań ?!
Wiem z uczelni, że w moim przypadku html pochodzi z DB i jest kodowany za pomocą latin-1. Próbuję ustawić parametr kodowania na latin-1, na ISO-8859-1 / iso-8859-1, ale nadal mam problem z wyświetlaniem znaków specjalnych, takich jak ä, ö, ü.
Będę bardzo wdzięczny za każdą radę.
WebView.loadDataWithBaseURL()
WebView.loadData () w ogóle nie działa poprawnie. Musiałem zrobić:
Myślę, że w twoim przypadku powinieneś zamienić UTF-8 na latin1 lub ISO-8859-1 zarówno w nagłówku, jak iw WebView.loadData ().
Aby udzielić pełnej odpowiedzi, oto oficjalna lista kodowań: http://www.iana.org/ assignments/character- sets
Aktualizuję odpowiedź, aby była bardziej inkluzywna:
Aby użyć WebView.loadData () z kodowaniem innym niż latin1, musisz zakodować zawartość html. Poprzedni przykład nie działał poprawnie w systemie Android 4+, więc zmodyfikowałem go tak, aby wyglądał następująco:
Ale później przeszedłem na WebView.loadDataWithBaseURL () i kod stał się bardzo czysty i nie zależał od wersji Androida:
Z jakiegoś powodu te funkcje mają zupełnie inną implementację.
źródło
Jak rozumiem,
loadData()
po prostu generuje plikdata:
adres URL z dostarczonymi danymi.Przeczytaj javadocs dla
loadData()
:Dlatego powinieneś albo użyć US-ASCII i samodzielnie uciec przed znakami specjalnymi, albo po prostu zakodować wszystko za pomocą Base64. Poniższe powinno działać, zakładając, że używasz UTF-8 (nie testowałem tego z latin1):
źródło
Mam ten problem, ale:
nie działa na wszystkich urządzeniach. I łączę kilka metod:
To działa.
źródło
użyj tego: String customHtml = text;
źródło
źródło
Najbezpieczniejszym sposobem, aby załadować htmlContent w widoku sieci Web jest:
„Kodowanie Base64” to oficjalna rekomendacja, która została napisana ponownie (już obecna w Javadoc) w najnowszym błędzie 01/2019 w Chrmium (obecny w WebView M72 (72.0.3626.76)):
https://bugs.chromium.org/p/chromium/issues/detail?id=929083
Oficjalne oświadczenie zespołu Chromium:
„Zalecana poprawka:
nasz zespół zaleca kodowanie danych za pomocą Base64. Podaliśmy przykłady, jak to zrobić:
Ta poprawka jest kompatybilna wstecz (działa we wcześniejszych wersjach WebView) i powinna być również przyszłościowa (nie napotkasz przyszłych problemów ze zgodnością w odniesieniu do kodowania treści). "
Przykład kodu:
źródło
powyższe odpowiedzi nie działają w moim przypadku. Musisz określić utf-8 w metatagu
źródło
webview.loadDataWithBaseURL (null, text, "text / html", "UTF-8", null);
źródło