2009-12-14 46 views
1

我使用apache HttpClient。而当我试图“阅读网站”时,所有非英文内容都表示错误。如何阅读java中的非英文文本?他们代表编码错误

实际上,它在windows-1252中表示,但它应该在UTF-8中。我怎样才能解决这个问题?

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

回答

0

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

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

所以,你可以使用下面的结构:

new BufferedReader(new XmlReader(inputStream)) 

去的内容。

2

如果文件在Windows-1252中,那么告诉它使用UTF-8将不起作用。以Windows-1252作为字符集名称,然后您可以读取正确的数据。知道什么格式的数据应该是不是几乎一样有用,因为知道它是什么格式实际上在:)

这取决于你是否然后重写它在UTF-8 ...

0

如果页面在“Content-Type”标题中进行了编码,HttpClient将会对其进行遵守。如果不是,它将假设拉丁-1,而不是Windows-1252。你确定你正在使用Windows-1252吗?您可以检查编码这样,

String encoding = method.getResponseCharSet(); 

如果您知道响应确实使用UTF-8,但头部没有指定它,您可以强制它读取UTF-8这样,

byte[] body = method.getResponseBody(); 
String response = new String(body, "UTF-8");