Używam URL.openConnection()
, aby pobrać coś z serwera. Serwer mówiPołączenie URL nie pobiera zestawu znaków
Content-Type: text/plain; charset=utf-8
Ale connection.getContentEncoding()
powraca null
. Co słychać?
Używam URL.openConnection()
, aby pobrać coś z serwera. Serwer mówiPołączenie URL nie pobiera zestawu znaków
Content-Type: text/plain; charset=utf-8
Ale connection.getContentEncoding()
powraca null
. Co słychać?
Jest to udokumentowane zachowanie jako metoda getContentEncoding()
jest określona, aby przywrócić zawartość nagłówka Content-Encoding
HTTP, który nie mieści się w swoim przykładzie . Można użyć metody getContentType()
i samemu przeanalizować wynikowy ciąg lub ewentualnie uzyskać bibliotekę klienta HTTP bardziej podobną do tej z Apache.
Wartość zwracana z URLConnection.getContentEncoding()
zwraca wartość z nagłówka Content-Encoding
kod z 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");
}
Zamiast raczej zrobić connection.getContentType()
pobrać Content-Type i odzyskać charset od Content-Type . Podaję przykładowy kod, w jaki sposób to zrobić ....
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
}
Te metody są nadpisywane w celu zwrócenia normalnych wartości w HttpURLConnection, o czym najprawdopodobniej mówi OP, zobacz http: // goo. gl/wt0P – Waldheinz
@Waldheinz, Dzięki, wymyśliłem to ... stąd zreupdowałem mój wpis .... –
Argument 'substring()' powinien być '" charset = ". length() + 1' – bigstones
Podobnie jak dodatek do odpowiedzi z @Buhake Sindi. Jeśli używasz guawy, zamiast ręcznego parsowania można zrobić:
MediaType mediaType = MediaType.parse(httpConnection.getContentType());
Optional<Charset> typeCharset = mediaType.charset();
ten wątek związany może pomóc nikogo innego: http://stackoverflow.com/questions/9112259/obtaining-response-charset-of-response -to-get-or-post-request – Spoonface
Istnieje również dobry powód connection.getContentEncoding() zwraca null: zwraca pole "Content-encoding" nagłówka http, które ** nie powinno ** dawać ci zestaw znaków. Powinno być używane na przykład wtedy, gdy odebrane dane są skompresowane i daje możliwość użycia ich do transformacji danych, abyś mógł je przeczytać. https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11 – jdarthenay