【发布时间】:2015-04-04 13:10:08
【问题描述】:
这是我的目标:给定一个预定义的顶级域和一个通用搜索 URL,并带有作为参数传递的附加输入查询,下载所述网站的源并将其显示在浏览器中。
最终,我将利用各种解析技术(子字符串、lol)来提取并使用 JaxWS + POJO 编组数据,但我需要查看原始 HTML 输出才能知道我的程序正确理解其编码。
我已经从响应返回变为简单的字符串返回,因为我得到了乱码编码。我试过设置编码 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(new URL...)。
下面的示例响应。请记住,当前它是 String,而不是 Response 返回,尽管 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�]��q9��i-
潜在的曲线球:我正在通过 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"?>
【问题讨论】:
标签: java tomcat encoding jersey response