URLConnection没有得到字符集

我正在使用URL.openConnection()从服务器下载内容。 服务器说

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

但是connection.getContentEncoding()返回null 。 怎么了?

这是记录的行为,因为指定了getContentEncoding()方法以返回Content-Encoding HTTP标头的内容,该标头未在您的示例中设置。 您可以使用getContentType()方法并自行解析生成的String,也可以使用Apache中更高级的 HTTP客户端库。

URLConnection.getContentEncoding()返回的值返回标头Content-Encoding的值

来自URLConnection.getContentEncoding()代码

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

相反,请执行connection.getContentType()以检索Content-Type并从Content-Type检索charset。 我已经包含了如何执行此操作的示例代码….

 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 } 

正如@Buhake Sindi的回答一样。 如果您使用的是Guava,而不是手动解析,您可以执行以下操作:

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