У меня проблема с загрузкой и анализом веб-страницы UTF-8 ... Я использую следующую функцию для получения веб-HTML:
static String getString(String url, ProgressDialog loading) {
String s = "", html = "";
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) new URL(url).openConnection();
conn.setRequestProperty("Content-Type", "text/plain; charset=utf-8");
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.connect();
DataInputStream dis = new DataInputStream(conn.getInputStream());
loading.setTitle("Descargando...");
loading.setMax( 32000 );
while ((s = dis.readLine()) != null) {
html += s;
loading.setProgress(html.length());
}
} catch (Exception e) {
Log.e("CC", "Error al descargar: " + e.getMessage());
} finally {
if (conn != null)
conn.disconnect();
}
return html;
}
И на веб-странице есть:
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
Но такие элементы испанского языка, как: ¡¿á é í ó ú, в приложении появляются неправильно. Я пытался использовать readUTF (), но у меня проблемы с длиной ...
Некоторые идеи? Спасибо!
2 ответа
Вам нужно использовать Reader
, где вы указываете кодировку, используемую для чтения входного потока. В этом конкретном случае вам понадобится InputStreamReader
< / а>.
Reader reader = null;
StringBuilder builder = new StringBuilder();
try {
// ...
reader = new InputStreamReader(connection.getInputStream(), "UTF-8");
char[] buffer = new char[8192];
for (int length = 0; (length = reader.read(buffer)) > 0;) {
builder.append(buffer, 0, length);
loading.setProgress(length);
}
} finally {
if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
}
String html = builder.toString();
// ...
Не связанный с конкретной проблемой, рассматривали ли вы возможность использования парсера HTML, такого как Jsoup? Мы учтем эти неприятные детали. Тогда это так просто, как
String html = Jsoup.connect(url).get().html();
// ...
Однако на самом деле это не позволяет подключать монитор прогресса.
Я почти уверен, что вы не хотите использовать DataInputStream.
Однако этот ответ может быть полезным: Чтение / преобразование InputStream в строку
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .