這是我的目標:給定一個預定義的頂級域名和一個通用搜索URL,並附帶一個作爲參數傳遞的輸入查詢,下載所述網站的源代碼並將其顯示在瀏覽器。使用Jersey,Tomcat和Java解析網站 - 編碼問題
最終,我將利用各種解析技術(substring,lol)來提取和封送JaxWS + POJOs的數據,但我需要查看原始HTML輸出以瞭解我的程序能夠正確理解其編碼。
我已經從一個Response返回一個簡單的字符串返回,因爲我得到了亂碼編碼。我試圖設置1000種不同的編碼方式,但似乎並不重要。
注意:還有其他方法可用於編組數據等,但我已將問題簡化爲兩個麻煩的方法。
public List<String> DownloadResultSource(URL url)
{
List<String> source = new ArrayList<String>();
BufferedReader br;
String curLine = null;
try
{
br = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
while((curLine = br.readLine()) != null)
{
source.add(curLine);
}
return source;
}
catch(Exception ex)
{
return null;
}
}
和
@GET
@Path("/{parameter}")
//@Produces(MediaType.TEXT_HTML + ";charset=utf-8")
public String searchSites(@PathParam("parameter") String parameter,
@DefaultValue("") @QueryParam("query") String query)
{
//crawl website with specified query
Crawler crawler = new Crawler();
//DEBUG
Host host = hostEnum.STACKOVERFLOW.getHost();
try
{
List<String> source = crawler.DownloadResultSource(new URL(host.getTopLevelDomain() + host.getDefaultSearch(query)));
StringBuilder sb = new StringBuilder();
sb.append(new URL(host.getTopLevelDomain() + host.getDefaultSearch(query)));
for(String line : source)
{
sb.append(line);
}
return sb.toString();
//return Response.status(Response.Status.OK).entity(sb.toString()).build();
}
catch (Exception ex)
{
return ex.toString();
}
// end DEBUG
// ORIGINAL return marshalResponse(crawler.SearchHost(hostEnum.STACKOVERFLOW, query));
}
return null;
}
就像我說我越來越亂碼輸出,我追加原始URL(sb.append(新URL的行少...)。
下面的示例響應:記住它是當前的字符串,不是響應返回,儘管Response ..... build()會得到相同的結果:
https://stackoverflow.com/search?q=my+search+query }yw H n' b_ 9BKw t y $#Py | VHh9 [ AQw o [ 〜 A d ==!t3 6L q q}} | i R /: IT #Oa = {「6" 或者: A] q9i-
潛在的弧線球:我通過Eclipse開發Windows ,儘管Tomcat服務器位於Ubuntu服務器上,但我使用HTML管理器來提升代碼。也許在Ubuntu上缺少UTF-8支持?我不這麼認爲,但我在智慧的結尾。
編輯 - 更多信息: 該項目是一個Maven項目,這裏是pom.xml中
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my package</groupId>
<artifactId>my project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.9</version>
</dependency>
</dependencies>
</project>
我的web.xml指定UTF-8,這樣的: <?xml version="1.0" encoding="UTF-8"?>