如何阅读java中的非英语文本?它们以错误的编码表示

时间:2009-12-14 11:36:48

标签: java encoding internationalization httpclient

我使用apache HttpClient。当我试图“阅读网站”时,所有非英语内容都被错误地表示出来。

实际上,它在windows-1252中有代表,但它应该是UTF-8。我该如何解决这个问题?

我尝试使用InputStreamReader (inputStream, Charset.forName ("UTF-8")),但它没有帮助(错误的符号转换为????????)。

3 个答案:

答案 0 :(得分:2)

如果文件在Windows-1252中,那么告诉它使用UTF-8是行不通的。将Windows-1252作为charset名称,然后您可以读取正确的数据。知道应该所处的格式数据并不像知道实际中的格式那样有用:)

然后由你决定是否用UTF-8重写它......

答案 1 :(得分:0)

找到正确的字符编码可能有点噩梦。根据您网站的内容,以下内容可能会有用。我过去做过的一件事是依靠一个使用多种方法来确定正确字符编码的类:

罗马项目的XmlReader将使用UTF字节顺序标记和/或XML声明来确定正确的编码。

所以你可以使用以下结构:

new BufferedReader(new XmlReader(inputStream))

获取内容。

答案 2 :(得分:0)

如果页面在“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");