我使用 apache HttpClient。当我试图“阅读网站”时,所有非英语内容都被错误地表示。
实际上,它是用 windows-1252 表示的,但它应该是 UTF-8。我怎样才能解决这个问题?
我尝试使用InputStreamReader (inputStream, Charset.forName ("UTF-8"))
,但没有帮助(错误的符号转换为????????)。
我使用 apache HttpClient。当我试图“阅读网站”时,所有非英语内容都被错误地表示。
实际上,它是用 windows-1252 表示的,但它应该是 UTF-8。我怎样才能解决这个问题?
我尝试使用InputStreamReader (inputStream, Charset.forName ("UTF-8"))
,但没有帮助(错误的符号转换为????????)。
如果文件在 Windows-1252 中,那么告诉它使用 UTF-8 是行不通的。给它 Windows-1252 作为字符集名称,然后你可以读取正确的数据。知道数据应该采用什么格式并不像知道它实际采用什么格式那么有用:)
是否用 UTF-8 重写它取决于你...
如果页面在“Content-Type”标头中有编码,HttpClient 将接受它。如果不是,它将假定为 Latin-1,而不是 Windows-1252。你确定你得到的是 Windows-1252 吗?你可以像这样检查编码,
String encoding = method.getResponseCharSet();
如果您知道响应确实使用 UTF-8 但标头未指定它,您可以强制它像这样读取 UTF-8,
byte[] body = method.getResponseBody();
String response = new String(body, "UTF-8");
找到正确的字符编码可能是一场噩梦。根据您网站的内容,以下内容可能有用。我过去做过的一件事是依赖一个类,该类将使用多种方法来确定正确的字符编码:
rome 项目中的XmlReader将使用 UTF 字节顺序标记和/或 XML 声明来确定正确的编码。
因此,您可以使用以下构造:
new BufferedReader(new XmlReader(inputStream))
获取内容。