studio programacion para móviles libro español edición desarrollo curso aplicaciones java http content-type httpurlconnection urlconnection

java - programacion - URLConnection no obtiene el conjunto de caracteres.



manual programacion android español pdf (3)

Estoy usando URL.openConnection() para descargar algo de un servidor. El servidor dice

Content-Type: text/plain; charset=utf-8

Pero connection.getContentEncoding() devuelve un null . ¿Que pasa?


El valor devuelto de URLConnection.getContentEncoding() devuelve el valor del encabezado Content-Encoding

Código de URLConnection.getContentEncoding()

/** * Returns the value of the <code>content-encoding</code> header field. * * @return the content encoding of the resource that the URL references, * or <code>null</code> if not known. * @see java.net.URLConnection#getHeaderField(java.lang.String) */ public String getContentEncoding() { return getHeaderField("content-encoding"); }

En su lugar, en lugar de hacer un connection.getContentType() para recuperar el Content-Type y recuperar el juego de caracteres del Content-Type. He incluido un código de ejemplo sobre cómo hacer esto ...

String contentType = connection.getContentType(); String[] values = contentType.split(";"); // values.length should be 2 String charset = ""; for (String value : values) { value = value.trim(); if (value.toLowerCase().startsWith("charset=")) { charset = value.substring("charset=".length()); } } if ("".equals(charset)) { charset = "UTF-8"; //Assumption }


Este es un comportamiento documentado ya que el método getContentEncoding() se especifica para devolver el contenido del encabezado HTTP de Content-Encoding , que no está establecido en su ejemplo. Puede usar el método getContentType() y analizar la cadena resultante por su cuenta, o posiblemente ir a una biblioteca de cliente HTTP más advanced como la de Apache .


Solo como una adición a la respuesta de @Buhake Sindi. Si está utilizando Guava, en lugar del análisis manual, puede hacer:

MediaType mediaType = MediaType.parse(httpConnection.getContentType()); Optional<Charset> typeCharset = mediaType.charset();