java网络编程解决中文乱码问题

本文主要解决以下几个问题:

一、如何使用post方法及post的内容

二、如何解决http包的乱码

三、网络编程的主要过程下面一一介绍。


一、如何使用post方法及post的内容

post是客户端向服务器发送的行为,这是很多人多明白的。但是,post传递的内容及格式和如何使用post编程,这一点很多人则不是很清楚。我也是搜集了大量的网络上的资源才明白的,所以要感谢网上那些无私奉献的“大牛”。

post主要传递的是NameValuePair,就是说是若干对Name和Value。当然格式也是非常重要的。比如form表单传递(post),传递用户名user,传递密码password。user对应的值假设为admin,password对应的值是admin,那么post的内容就是——user=admin&password=admin注意,Name和value之间有一个“=”,而两个Name和Value对之间有“&”,这个在写程序时要注意


二、如何解决http包乱码其实中文乱码问题大家并不陌生,而且对此也是“深恶痛绝”。我也没有一个完全的解决办法,可以用之四海皆准。不过,在网络编程中,我提出一种方式,保证可以通过。(痛苦了一天去测试各种方法,有些网上的代码根本就不能用,稍稍吐槽一下,但是不影响我对网络共享资源的推崇以及对那些无私的人的尊敬)

如下:

1.对于中文Value(或Name,我没测试Name,因为两个是一样的),可以使用如下的方式URLEncoder.encode(values[i], "UTF-8"),之后组装好post出去。

2.通过URL连接收到服务端返回的inputstream时,可以做类似如下转换:in = new Scanner(conn.getInputStream(),"UTF-8");这样就可以保证post出去的是UTF-8,接收到的也是UTF-8。


三、网络编程的主要过程

第一步,建立连接URL url;url = new URL(strURL);URLConnection conn = url.openConnection();

第二步,设置connconn.setDoInput(true);conn.setDoOutput(true);这个是必须的,至于为什么我目前也没有搞清楚。大家可以在评论中讨论,我将来弄清楚时会给出答案

第三步,建立输出流并准备输出内容

A、PrintWriter out = new PrintWriter(conn.getOutputStream());

B、boolean first = true;//下面是实现post内容的一个方式

for(int i=0; i<7; i++)

{

 if(first)

{ first = false; }

else{ out.print("&"); }

 out.print(names[i]); 

out.print("="); 

out.print(URLEncoder.encode(values[i], "UTF-8"));//这里处理中文乱码 }

out.close();

第四步,准备接收

Scanner in;in = new Scanner(conn.getInputStream(),"UTF-8");//这里处理中文乱码

第五步,处理输入流内容

StringBuilder response = new StringBuilder(); 

while(in.hasNextLine())

{ response.append(in.nextLine()); response.append("\n");}

String temp = response.toString();System.out.println(temp);

这里使用StringBuilder类,其实是优化StringBuffer,也可以使用StringBuffer。

后记

通过这三部分介绍,可以很轻松的搭建一个模拟form表单提交的过程,而且将中文乱码问题很好处理。这也可以作为爬虫程序的一个参考。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值