在下载网页之前,我需要获取网页的编码(UTF-8、ISO-8859-1 等),因为我将使用编码将其从下载的 InputStream 转换为 String。
我使用 HttpUrlConnection,并且有一个名为 getContentEncoding 的方法,但仅当服务器发送它时它才会返回。
在某些情况下,编码是在属性字符集(HTML4?)中,在其他情况下是在属性编码(XHTML)中,还有一些我不知道,但我认为还有其他形式。
有一些类可以做到这一点或者有什么方法可以做到这一点?
最佳答案
HTTP 1.1 specification指示 Content-Type
“应该”用于指示内容,并且不包含此 header 的响应应被视为“application/octet-stream”——换句话说,一个序列字节而不是字符。使用“应该”表示这是推荐的做法,但某些服务器可能不遵循它。
因此,您的第一步是查找此 header 。如果它不存在,则不要对内容应用任何字符集解码。对于 XML,假设您将流传递给解析器,这将正常工作:流将采用 UTF-8 编码,或者序言将指定编码。并且您应该始终将流直接传递到 XML 解析器,而不是先尝试将它们转换为字符串。
如果有一个 Content-Type
header ,并且它指定了字符集,那么您可以根据该字符集自由进行解码。该规范还讨论了如何处理 missing character set :对于任何 text
内容类型,您应该假设它是使用 ISO-8859-1 编码的。
这就是下一步:如果有字符集,或者是 text
媒体类型,则应用解码。
否则,请保留该流。
关于java - 在下载页面之前如何获取页面的编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5921941/