在Web项目中抓取一个网站上的数据,中文乱码

peter20091001 2017-05-29 04:28:54

public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
PrintWriter pout = null;
BufferedReader pin = null;
String result = "";
try {
URL realUrl = new URL("http://jzsc.mohurd.gov.cn/dataservice/query/comp/list");
// 打开和URL之间的连接
URLConnection conn = realUrl.openConnection();
// 设置通用的请求属性
conn.setRequestProperty("accept", "*/*");
conn.setRequestProperty("connection", "Keep-Alive");
conn.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 发送POST请求必须设置如下两行
conn.setDoOutput(true);
conn.setDoInput(true);
// 获取URLConnection对象对应的输出流
pout = new PrintWriter(conn.getOutputStream());
// 发送请求参数
//pout.print("complexname=杭州&$reload=0&$pg=3&$pgsz=15");
pout.print("complexname=杭州");
// flush输出流的缓冲
pout.flush();
// 定义BufferedReader输入流来读取URL的响应
pin = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
boolean print = false;
StringBuilder sb = new StringBuilder("");
while ((line = pin.readLine()) != null) {
if(line.contains("<tbody")) {

print = true;
continue;
}
if(print) {
if(line.contains("<tr")||line.contains("</tr>")){
sb.append("\n"+line.replace("\t", ""));
} else {
sb.append(line.replace("\t", ""));
}
}
if(line.contains("</tbody")) {
break;
}
}


} catch (Exception e) {
pout.println("发送 POST 请求出现异常!"+e);
e.printStackTrace();
}
//使用finally块来关闭输出流、输入流
finally{
try{
if(pout != null){
pout.close();
}
if(pin != null){
pin.close();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}
}


这段代码能正常运行,没有中文乱码的情况。
我把同样的代码放到SpringMVC框架中,得到的html代码中中文都是乱码。
这是为什么呢?

@Controller
public class TestController {
@RequestMapping("/data")
public String getData() {
//上述抓取数据的代码
}
}
...全文
382 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwn_2016 2017-06-01
  • 打赏
  • 举报
回复
哈哈 刚本地测试了一下,我springMVC环境是utf-8,真出乱码了。
修改了
pin = new BufferedReader(
new InputStreamReader(conn.getInputStream(),"utf-8"));
结果如下
YiYanXiYin 2017-06-01
  • 打赏
  • 举报
回复
// 定义BufferedReader输入流来读取URL的响应,设置utf-8编码 pin = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8")); 是不是utf-8你得查看页面编码确认一下
xwn_2016 2017-06-01
  • 打赏
  • 举报
回复
先从抓取的页面中去找他的头文件,看看有没有设定编码格式,如果有,把头里的编码格式设置成输出的编码格式,如果没有则用一个默认的格式,比如“utf-8”等
  • 打赏
  • 举报
回复
先看看人网站用的编码
李德胜1995 2017-05-31
  • 打赏
  • 举报
回复
引用 4 楼 happybebe 的回复:
所有出现乱码的问题都是由于编码设置不正确导致,安全起见建议所有涉及到编码的地方都设置utf-8
引用 3 楼 u010087908 的回复:
你在pom.xml里设置编码了没 比如
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    ...
</properties>
你俩都从水区水到这里来了???6666
  • 打赏
  • 举报
回复
所有出现乱码的问题都是由于编码设置不正确导致,安全起见建议所有涉及到编码的地方都设置utf-8
NANU-NANA 2017-05-31
  • 打赏
  • 举报
回复
引用 5 楼 pany1209 的回复:
[quote=引用 4 楼 happybebe 的回复:] 所有出现乱码的问题都是由于编码设置不正确导致,安全起见建议所有涉及到编码的地方都设置utf-8
引用 3 楼 u010087908 的回复:
你在pom.xml里设置编码了没 比如
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    ...
</properties>
你俩都从水区水到这里来了???6666[/quote] 我一直在等你的200分大帖
NANU-NANA 2017-05-30
  • 打赏
  • 举报
回复
你在pom.xml里设置编码了没 比如
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    ...
</properties>
yzk18816157390 2017-05-30
  • 打赏
  • 举报
回复
你注意看一下你的响应编码格式和jsp的编码格式和你接收请求的格式是否一致
搬运工木木 2017-05-29
  • 打赏
  • 举报
回复
你不能指望系统自动帮你转成正确的码,我印象中输入输出流是可以设置编码格式的。 另外,你说出现乱码是指调用controller 的 getData 返回到前台是乱码么?这里还涉及一个编码转换的,你可以查下 @RequestMapping 详细用法

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧